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

如何在浏览器中将UTF8编码转换为EUC-JP编码?

浏览器端将UTF-8字符串转换为EUC-JP编码的URL参数

问题说明

我需要把UTF-8编码的字符串转换为EUC-JP编码,用于HTTP请求URL的关键字参数,例如将那賀崎ゆきね转换为%c6%e1%b2%ec%ba%ea%a4%e6%a4%ad%a4%cd。

TextDecoder仅能将EUC-JP字节解码为UTF-8字符串,无法实现反向编码:

const decoder = new TextDecoder('euc-jp');
const decodedString = decoder.decode(eucjpBytes); 

console.log(decodedString);

Node.js中的encoding.js、encoding-japanese或iconv-lite依赖本地环境,无法直接在浏览器中使用。以下是我的HTTP请求代码示例:

原生XMLHttpRequest实现

const url = 'https://xxx'
const encoded = 'xxx';
url = url + encoded;
const Http = new XMLHttpRequest();
Http.open("GET", url);
Http.send();
Http.onload = function(e) {
         let domNewx = new DOMParser().parseFromString(Http.responseText, 'text/html');
}

Greasemonkey/Tampermonkey的GM_xmlhttpRequest实现

const url = 'https://xxx'
const encoded = 'xxx';
url = url + encoded;
GM_xmlhttpRequest({
            method: 'GET',
            url: url,
            anonymous: true,
            onload: function (result) {
                xhrResult = result.status;
                let domNewx = new DOMParser().parseFromString(result.responseText, 'text/html');
            },
            onerror: function (result) {
                console.log(result);
            },
});

解决方案

可以使用encoding-japanese的浏览器兼容版本,无需Node环境,直接在前端实现UTF-8到EUC-JP的编码转换并生成URL参数格式。

1. 引入依赖

通过CDN直接引入encoding-japanese:

<script src="https://cdn.jsdelivr.net/npm/encoding-japanese@2.0.0/lib/encoding.min.js"></script>

2. 实现编码转换函数

function utf8ToEucJpUrlEncode(str) {
    // 将UTF-8字符串转为EUC-JP字节数组
    const eucJpBytes = Encoding.convert(str, {
        to: 'EUC-JP',
        from: 'UTF-8'
    });
    // 转换为URL编码格式
    let urlEncoded = '';
    eucJpBytes.forEach(byte => {
        urlEncoded += `%${byte.toString(16).padStart(2, '0').toUpperCase()}`;
    });
    return urlEncoded;
}

// 测试
const keyword = '那賀崎ゆきね';
const encoded = utf8ToEucJpUrlEncode(keyword);
console.log(encoded); // 输出: %C6%E1%B2%EC%BA%EA%A4%E6%A4%AD%A4%CD

3. 整合到HTTP请求

以GM_xmlhttpRequest为例:

const baseUrl = 'https://xxx';
const keyword = '那賀崎ゆきね';
const encodedKeyword = utf8ToEucJpUrlEncode(keyword);
const fullUrl = `${baseUrl}${encodedKeyword}`;

GM_xmlhttpRequest({
    method: 'GET',
    url: fullUrl,
    anonymous: true,
    onload: function (result) {
        xhrResult = result.status;
        let domNewx = new DOMParser().parseFromString(result.responseText, 'text/html');
        // 后续处理逻辑
    },
    onerror: function (result) {
        console.log(result);
    },
});

内容的提问来源于stack exchange,提问作者lyscop

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 16:13:11