如何将包含%u021、%u0219等特殊编码的字符串转为正常可读字符
解决方案
问题本质
你遇到的是%uXXXX格式的非标准Unicode转义序列,这类编码是早期JavaScript独有的百分号Unicode编码格式,通用的URL解码函数无法识别,所以普通教程的方法不生效。你示例中的%u021B对应罗马尼亚语的ț,%u0219对应罗马尼亚语的ș,只需先解码转义序列,再移除字符重音即可得到目标结果。
Python 实现代码
# 先安装依赖:pip install unidecode from unidecode import unidecode raw_str = 'Strada Constitu%u021Biei, Foc%u0219ani 620123, Romania' # 第一步:解码%uXXXX转义为Unicode字符 unicode_str = raw_str.replace('%u', '\\u').encode('latin1').decode('unicode_escape') # 第二步:移除重音转为纯ASCII字符 result = unidecode(unicode_str) print(result) # 输出:Strada Constitutiei, Focsani 620123, Romania
JavaScript 实现代码
const rawStr = 'Strada Constitu%u021Biei, Foc%u0219ani 620123, Romania'; // 第一步:正则匹配解码%uXXXX转义 const unicodeStr = rawStr.replace(/%u([0-9a-fA-F]{4})/g, (_, code) => String.fromCharCode(parseInt(code, 16))); // 第二步:通过Unicode规范化移除重音 const result = unicodeStr.normalize('NFD').replace(/[\u0300-\u036f]/g, ''); console.log(result) // 输出:Strada Constitutiei, Focsani 620123, Romania
内容的提问来源于stack exchange,提问作者Lucian Blaga
相关产品推荐
相关产品推荐

