JavaScript Fetch:具有编码问题的字符

时间:2019-03-21 14:14:31

标签: javascript utf-8 character-encoding fetch

我正在尝试使用Fetch将一些数据带到屏幕上,但是有些字符显示奇怪的符号,我认为这与转换特殊字符有关。

在服务器端进行调试时,或者如果在浏览器中调用servlet,则不会发生此问题,因此我认为问题出在我的JavaScript。请参见下面的代码:

var myHeaders = new Headers();
myHeaders.append('Content-Type','text/plain; charset=UTF-8');

fetch('getrastreiojadlog?cod=10082551688295', myHeaders)
        .then(function (response) {
            return response.text();
        })
        .then(function (resp) {
            console.log(resp);
        });

我认为这可能是一些细节,但是我还没有找出正在发生的事情。因此欢迎任何提示 谢谢

3 个答案:

答案 0 :(得分:0)

也许您的服务器没有返回utf-8编码的响应,请尝试查找使用了哪个字符集,然后在调用标头中对其进行修改。 也许是ISO-8859-1:

php.ini

答案 1 :(得分:0)

事实证明,问题在于servlet如何在不显式通知响应类型的情况下提供数据。 通过在Java servlet中添加以下行:

response.setContentType("text/html;charset=UTF-8");

有可能获得正确格式的字符。

答案 2 :(得分:0)

response's text() 函数始终将有效负载解码为 utf-8。

如果您想要其他字符集的文本,您可以使用 TextDecoderresponse buffer(不是文本)转换为具有所选字符集的解码文本。

使用您的示例应该是:

var myHeaders = new Headers();
myHeaders.append('Content-Type','text/plain; charset=UTF-8');

fetch('getrastreiojadlog?cod=10082551688295', myHeaders)
        .then(function (response) {
            return response.arrayBuffer();
        })
        .then(function (buffer) {
            const decoder = new TextDecoder('iso-8859-1');
            const text = decoder.decode(buffer);
            console.log(text);
        });

请注意,我使用 iso-8859-1 作为解码器。

信用:Schneide Blog