You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,提问作者김상현

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 19:54:20