我需要用 javascript 修复一些网络数据的编码。我无法控制数据的生成方式,但这基本上就是正在发生的事情:
(new TextDecoder('latin1')).decode((new TextEncoder()).encode('å'))
'Ã¥'
所以目前页面显示的是 ñ¥ 而不是预期的 å。
我怎样才能用一些javascript代码或页眉来解决这个问题??
这是对正在发生的事情的一些解释:https://stackoverflow.com/a/34434386/42580
如果您的数据编码错误并且您正在使用 JavaScript,则可以尝试使用各种方法清理或转换编码。但是,请记住,恢复错误的编码可能具有挑战性,成功与否取决于编码问题的性质和程度。
您可以采取以下一些步骤:
TextDecoder
等功能将文本转换为 Unicode。// Assuming 'encodedText' is your text with bad encoding
const decoder = new TextDecoder('UTF-8'); // Change 'UTF-8' to the detected encoding
const uint8Array = new TextEncoder().encode(encodedText);
const decodedText = decoder.decode(uint8Array);
// Example: Replace all non-printable ASCII characters
const cleanedText = encodedText.replace(/[^\x20-\x7E]/g, '');
const detectEncoding = require('chardet'); // Assuming you've installed chardet using npm
function fixBadEncoding(encodedText) {
// Step 1: Detect encoding
const detectedEncoding = detectEncoding.detect(Buffer.from(encodedText));
// Step 2: Convert to Unicode
const decoder = new TextDecoder(detectedEncoding.encoding);
const uint8Array = new TextEncoder().encode(encodedText);
const decodedText = decoder.decode(uint8Array);
// Step 3: Clean invalid characters
const cleanedText = decodedText.replace(/[^\x20-\x7E]/g, '');
return cleanedText;
}
const badEncodedText = '...'; // Replace with your actual text
const fixedText = fixBadEncoding(badEncodedText);
console.log(fixedText);
请记住,这些都是通用策略,修复错误编码的成功率可能会根据数据的具体情况而有所不同。在尝试任何编码转换之前备份数据也是一个好习惯,尤其是在数据至关重要的情况下。
要解决编码问题,我认为您可以使用 TextDecoder for Latin1 解码错误编码的字符串,然后使用 UTF-8 中的 TextEncoder 重新编码。
const fixEncoding = str => {
let decodedStr = new TextDecoder('latin1').decode(new TextEncoder().encode(str));
return new TextDecoder('utf-8').decode(new TextEncoder().encode(decodedStr));
}
console.log(fixEncoding('Ã¥'));