JavaScript 获取:存在编码问题的字符
JavaScript Fetch: characters with encoding issues
我正在尝试使用 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);
});
我认为这可能是一些细节,但我还没有设法找出发生了什么。所以欢迎任何提示
感谢
也许您的服务器未返回 utf-8 编码的响应,请尝试查找使用了哪个字符集,然后在调用 headers 中修改它。
也许是 ISO-8859-1 :
myHeaders.append('Content-Type','text/plain; charset=ISO-8859-1');
事实证明,问题在于 servlet 如何在没有明确通知响应的编码类型的情况下提供数据。
通过在 Java servlet 中添加以下行:
response.setContentType("text/html;charset=UTF-8");
有可能得到正确格式的字符。
response's text() 函数始终将负载解码为 utf-8。
如果您想要其他字符集中的文本,您可以使用 TextDecoder to convert the response 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
作为解码器。
我正在尝试使用 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);
});
我认为这可能是一些细节,但我还没有设法找出发生了什么。所以欢迎任何提示 感谢
也许您的服务器未返回 utf-8 编码的响应,请尝试查找使用了哪个字符集,然后在调用 headers 中修改它。 也许是 ISO-8859-1 :
myHeaders.append('Content-Type','text/plain; charset=ISO-8859-1');
事实证明,问题在于 servlet 如何在没有明确通知响应的编码类型的情况下提供数据。 通过在 Java servlet 中添加以下行:
response.setContentType("text/html;charset=UTF-8");
有可能得到正确格式的字符。
response's text() 函数始终将负载解码为 utf-8。
如果您想要其他字符集中的文本,您可以使用 TextDecoder to convert the response 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
作为解码器。