XMLHttpRequest returns 个编码错误的字符
XMLHttpRequest returns wrongly encoded characters
我使用XMLHttpRequest读取PDF文档
http://www.virtualmechanics.com/support/tutorials-spinner/Simple2.pdf
%PDF-1.3
%âãÏÓ
[...]
并将其内容打印到控制台:
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
console.log(xhr.responseText);
console.log('âãÏÓ');
}
};
xhr.open('GET', 'http://www.virtualmechanics.com/support/tutorials-spinner/Simple2.pdf', true);
xhr.send();
然而,控制台显示
%PDF-1.3
%����
[...]
âãÏÓ
(最后一行来自参考文献 console.log
,以验证控制台是否确实可以显示这些字符。)
显然,字符在某些时候被错误编码。出了什么问题以及如何解决这个问题?
您的文件的 MIME 类型可能不是 UTF-8。尝试按照建议 here 和如下所示覆盖它:
xhr.open('GET', 'http://www.virtualmechanics.com/support/tutorials-spinner/Simple2.pdf', true);
xhr.overrideMimeType('text/xml; charset=iso-8859-1');
xhr.send();
XMLHttpRequest 的默认响应类型是text
,但这里实际上是处理二进制数据。 Eric Bidelman 描述了如何使用它。
问题的解决方案是将数据读取为 Blob
,然后从 blob 中提取数据并将其插入 hash.update(..., 'binary')
:
var xhr = new XMLHttpRequest();
xhr.open('GET', details.url, true);
xhr.responseType = 'blob';
xhr.onload = function() {
if (this.status === 200) {
var a = new FileReader();
a.readAsBinaryString(this.response);
a.onloadend = function() {
var hash = crypto.createHash('sha1');
hash.update(a.result, 'binary');
console.log(hash.digest('hex'));
};
}
};
xhr.send(null);
我使用XMLHttpRequest读取PDF文档 http://www.virtualmechanics.com/support/tutorials-spinner/Simple2.pdf
%PDF-1.3
%âãÏÓ
[...]
并将其内容打印到控制台:
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
console.log(xhr.responseText);
console.log('âãÏÓ');
}
};
xhr.open('GET', 'http://www.virtualmechanics.com/support/tutorials-spinner/Simple2.pdf', true);
xhr.send();
然而,控制台显示
%PDF-1.3
%����
[...]
âãÏÓ
(最后一行来自参考文献 console.log
,以验证控制台是否确实可以显示这些字符。)
显然,字符在某些时候被错误编码。出了什么问题以及如何解决这个问题?
您的文件的 MIME 类型可能不是 UTF-8。尝试按照建议 here 和如下所示覆盖它:
xhr.open('GET', 'http://www.virtualmechanics.com/support/tutorials-spinner/Simple2.pdf', true);
xhr.overrideMimeType('text/xml; charset=iso-8859-1');
xhr.send();
XMLHttpRequest 的默认响应类型是text
,但这里实际上是处理二进制数据。 Eric Bidelman 描述了如何使用它。
问题的解决方案是将数据读取为 Blob
,然后从 blob 中提取数据并将其插入 hash.update(..., 'binary')
:
var xhr = new XMLHttpRequest();
xhr.open('GET', details.url, true);
xhr.responseType = 'blob';
xhr.onload = function() {
if (this.status === 200) {
var a = new FileReader();
a.readAsBinaryString(this.response);
a.onloadend = function() {
var hash = crypto.createHash('sha1');
hash.update(a.result, 'binary');
console.log(hash.digest('hex'));
};
}
};
xhr.send(null);