JavaScript中Unicode转义还原:如何将乱码Ã\u0098vo转换为目标字符串Øvo
问题本质
你拿到的Ã\u0098vo是UTF-8编码的字节流被错误按照单字节编码(ISO-8859-1)解析得到的乱码,你之前的解码尝试顺序完全和编码逻辑相反,所以无法得到正确结果。
方案1:直接还原已有的乱码字符串
如果已经拿到Ã\u0098vo这类乱码,可以直接用编码转换还原:
function fixEncoding(messyStr) { // 把乱码按ISO-8859-1转回原始字节流,再按UTF-8解码 return new TextDecoder('utf-8').decode( new Uint8Array([...messyStr].map(c => c.charCodeAt(0))) ); } // 测试 console.log(fixEncoding('Ã\u0098vo')); // 输出 Øvo
方案2:完整反向解码原编码逻辑的输出
原编码逻辑的步骤是JSON序列化 → encodeURIComponent → unescape → base64编码,反向解码需要完全倒序操作:
function decodeOriginalModel(base64Input) { // 1. 先解码base64 const base64Decoded = window.atob(base64Input); // 2. 转成URI编码格式 const escapedStr = escape(base64Decoded); // 3. 解码URI得到原始JSON字符串 const originJson = decodeURIComponent(escapedStr); // 4. 解析JSON得到原始数据 return JSON.parse(originJson); }
之前尝试失败的原因
你之前测试时把atob放在最外层,还把decodeURIComponent放在escape之前,操作顺序和编码逻辑完全相反,所以会触发字符非法报错,或者拿到错误结果。
内容的提问来源于stack exchange,提问作者wi2ard
相关产品推荐
相关产品推荐

