一个编码EUC-JP的网站使用GM_xmlhttpRequest请求后,使用encoding.min.js转码后结果不能正常显示
直接请求结果显示乱码,请求结果转码为EUC-JP显示乱码,请求二进制结果,转化为EUC-JP编码,以及再转化为UTF8均显示乱码,如何将结果正常显示日文文字
⚠️#NSFW#
function convertBufferToEucJp(buffer) {
// Convert buffer to Uint8Array
const uint8Array = new Uint8Array(buffer);
// Convert Uint8Array to string with UTF-8 encoding (assuming the buffer is UTF-8)
const utf8String = new TextDecoder("utf-8").decode(uint8Array);
// Convert UTF-8 string to EUC-JP
const eucJpString = Encoding.convert(utf8String, {
to: 'EUCJP',
from: 'UTF8'
});
return eucJpString;
}
GM_xmlhttpRequest({
method: "GET",
url: "https://seesaawiki.jp/av_video/d/%c6%e1%b2%ec%ba%ea%a4%e6%a4%ad%a4%cd",
responseType: "arraybuffer", // Get response as ArrayBuffer
onload: function(response) {
if (response.status >= 200 && response.status < 300) {
// Convert ArrayBuffer to EUC-JP string
const eucJpString = convertBufferToEucJp(response.response);
// Do something with the EUC-JP string
console.log(eucJpString);
} else {
console.error("Error fetching data:", response.status);
}
},
onerror: function(error) {
console.error("Request error:", error);
},
});
试了一下,把解码函数换成这个就可以了
const ab2str = (arrayBuf, encodeType) =>{
var decoder = new TextDecoder(encodeType)
var u8arr = new Uint8Array(arrayBuf)
return decoder.decode(u8arr)
}
ab2str(response.response, 'EUC-JP')
参考来源:
在你的代码中,问题主要出在假设服务器返回的响应已经是UTF-8编码,但实际上它是EUC-JP编码。当你尝试将EUC-JP编码的二进制数据当作UTF-8来解码时,会导致乱码。因此,你应该直接处理EUC-JP编码的二进制数据,而不是先尝试将其解码为UTF-8字符串。
以下是一个修改后的版本,它直接处理EUC-JP编码的ArrayBuffer,并将其转换为UTF-8字符串(如果你需要的话),以便在控制台或网页上正常显示日文:
// 假设你已经引入了Encoding.js库来处理编码转换
function arrayBufferToEucJpString(buffer) {
// 这里的buffer已经是EUC-JP编码的二进制数据,不需要额外转换
// 但由于我们通常需要文本处理,我们可以选择将其转换为UTF-8
const eucJpString = Encoding.convert(buffer, 'EUCJP', 'UTF8');
return eucJpString;
}
GM_xmlhttpRequest({
method: "GET",
url: "https://seesaawiki.jp/av_video/d/%c6%e1%b2%ec%ba%ea%a4%e6%a4%ad%a4%cd",
responseType: "arraybuffer", // 直接获取二进制响应
onload: function(response) {
if (response.status >= 200 && response.status < 300) {
// 直接将ArrayBuffer转换为EUC-JP字符串(如果需要UTF-8则如上转换)
const eucJpString = arrayBufferToEucJpString(response.response);
// 现在eucJpString是UTF-8编码的字符串,可以直接在控制台或网页上显示
console.log(eucJpString);
} else {
console.error("Error fetching data:", response.status);
}
},
onerror: function(error) {
console.error("Request error:", error);
}
});
注意:
Encoding.convert
方法将其转换为UTF-8字符串。另外,如果网页的响应头明确指出了字符编码(Content-Type),则通常不需要手动进行编码转换,除非响应头错误或缺失。在你的情况下,由于你直接通过URL编码访问了资源,且知道其编码为EUC-JP,因此上述方法是适用的。
在你说这是转发之前,我必须说我已经试过阅读其他帖子,所以请继续阅读。 在text View中显示链接的基本方法可以通过下一种方式完成: 还有绳子。xml文件可能包含: 然而,我们可能希望捕获点击链接的事件,并自行处理。不仅如此,链接可能不需要是真正的url。 许多帖子存在,以显示如何做到这一点,但没有一个,我试图处理好。 有些应用程序允许在应用程序上处理意图,这相当麻烦,可能意味着其他应用程序也可
我正在处理一个PHP项目,它获取电子邮件并在屏幕上显示它们。它在电子邮件中获取以下html: 我的程序是这样做的: 但我的输出是: null 我试过: 1. 但仍显示乱码或中文字符。 正确显示此html的正确方法是什么?
如何将 OpenGl 显示器附加到 J 框架,以便在关闭 JFrame 时破坏显示器?这是我到目前为止的代码: 在我进行可运行之前,我已经将开放显示器连接到JFrame。但是在添加可运行的显示器后,显示屏现在显示的尺寸与我的屏幕尺寸相同。我已尝试重新排列 和 但是没有什么变化,opengl显示仍然是相同的大小,当我尝试先关闭JFrame而不是先关闭显示时,我得到了以下错误: 这让我想到我的 我猜这
问题内容: 这是SQL查询: 当我在Microsoft SQL Server Management Studio中运行此查询时,得到以下信息: 问题:我是否需要在SQL查询中进行任何更改以获取婕㈠瓧的结果,还是代码页等问题? 问题答案: 变量由表示,因此它将是 现在,输出将保持原样。运行以上代码。
我对java servlet文件中的UTF-8有一些问题。当我在URL中获得参数值时,我对UTF-8字符有一些问题。它不能正确显示日语字符。 Jsp标头已具有 我将连接器中的URIEncoding设置添加到服务器中的UTF-8。xml。 我在jsp中编写了如下代码。 然后,我在java servlet中编写了以下代码。 我还使用请求进行了测试。setCharacterEncoding()方法,但它
我有一个缓冲区与字符编码在Windows 1252。然而,当我用适当的编码创建一个新的字符串时,而不是预期的结果,我经常会得到询问标记,例如。 因此,系统应在其上方显示带“^”的“u”字符。而是显示“?”。 任何想法?