2

我使用 XMLHttpRequest 。

如果数据以 UTF-8 写入,则没有问题。

但是数据是用 Shift-jis 写入的,我无法读取响应。

我尝试像下面这样设置请求标头,但它没有用。

setRequestHeader("Content-Type", "text/plain;charset=Shift-JIS");

如何在 Shift-JIS 中获取响应数据?

4

1 回答 1

0

JavaScript 字符串的内部表示是 UTF-16。因此,您将首先将 Shift-JIS 字节数组转换为 JavaScript 字符串。

现代浏览器可以为此目的使用 TextDecoder ( https://caniuse.com/#feat=textencoder )。首先,您必须设置responseType为:XMLHttpRequestarraybuffer

var req = new XMLHttpRequest();
req.responseType = "arraybuffer";
var arrayBuffer = req.response;

您将获得一个字节数组,该数组表示 Shift-JIS 编码中的响应数据arrayBuffer

然后,Uint8Array为文本创建一个对象Shift-JIS,并将其转换为有序的 JavaScript 字符串。

var byteArray = new Uint8Array(arrayBuffer);
var decoder = new TextDecoder('shift_jis');
var str = win1251decoder.decode(byteArray);

你会得到一个 UTF-16 字符串str

于 2020-07-14T16:11:14.937 回答