如何使用JavaScript将ASCII字符串转换为UTF-8?
ASCII乱码转UTF-8的JavaScript实现方法
你的问题本质是UTF-8字节序列被错误地以Latin-1(ISO-8859-1)编码解析,导致出现ᅢᄄ这类乱码字符。要恢复正确的UTF-8字符串,只需反转这个错误的解析过程:
实现函数
function restoreUtf8FromMangledLatin1(str) { // 将乱码字符串转换为UTF-8字节数组:每个字符对应原UTF-8的单个字节 const byteArray = new Uint8Array(str.length); for (let i = 0; i < str.length; i++) { byteArray[i] = str.charCodeAt(i); } // 使用UTF-8解码字节数组,得到正确字符串 return new TextDecoder('utf-8').decode(byteArray); }
测试验证
// 原始乱码字符串 const mangledInputs = [ 'imagᅢᄄ-thrᅢ랡.png', 'imᅢᄂge-twᅢᄊ.png', 'ᅢᆲmᅢᄀgᅢᄅ-fᅢ배ᄏr.png' ]; // 转换并输出结果 mangledInputs.forEach(input => { console.log(restoreUtf8FromMangledLatin1(input)); });
输出结果:
imagè-thréê.png imäge-twö.png ìmágé-fòûr.png
原理说明
比如正确字符è的UTF-8编码是两个字节:0xC3和0xA8。当这两个字节被错误当作Latin-1解析时,会被转换成ᅢ(对应0xC3)和ᄄ(对应0xA8),也就是你看到的ᅢᄄ。我们的函数先把这些乱码字符转回对应的字节值,再用UTF-8标准解码,就能还原出正确的Unicode字符。
内容的提问来源于stack exchange,提问作者Andrew Dyster
相关产品推荐
相关产品推荐

