Node.js中如何解码EUC-KR编码URL字符串?解决decodeURI报错问题
解决方案
要在Node.js中实现与Kotlin URLDecoder.decode(..., "euc-kr") 相同的解码效果,需要分两步处理:先将百分编码字符串还原为EUC-KR编码的原始字节,再将字节数组按EUC-KR编码解析为字符串。
方法一:直接操作Buffer
这是最直接的实现方式,无需额外依赖:
const targetString = '%B1%E8%BB%F3%C7%F6'; // 移除所有百分号,将十六进制字符串转为对应EUC-KR原始字节的Buffer const eucKrBuffer = Buffer.from(targetString.replace(/%/g, ''), 'hex'); // 按EUC-KR编码解析Buffer为字符串 const decodedResult = eucKrBuffer.toString('euc-kr'); console.log(decodedResult); // 输出:김상현
方法二:使用querystring模块
如果需要处理查询字符串类场景,可借助Node.js内置的querystring模块,通过指定编码参数实现:
const querystring = require('querystring'); const targetString = '%B1%E8%BB%F3%C7%F6'; // 构造查询字符串格式,通过options指定解码编码为euc-kr const parsed = querystring.parse(`val=${targetString}`, undefined, undefined, { encoding: 'euc-kr' }); console.log(parsed.val); // 输出:김상현
为什么decodeURI会报错?
decodeURI的设计目标是解码UTF-8编码的百分转义字符串,而%B1%E8%BB%F3%C7%F6是EUC-KR编码字节的转义结果,这些字节不符合UTF-8的编码规则(比如UTF-8对多字节序列的起始字节、后续字节有严格格式要求),因此调用decodeURI会触发「URI malformed」错误。
内容的提问来源于stack exchange,提问作者김상현
相关产品推荐
相关产品推荐

