【发布时间】:2016-02-03 18:51:34
【问题描述】:
我正在做一些网络爬虫,并注意到我得到了一些奇怪的文档,其中包含像“�”这样的字符。
我访问了有问题的网站,但文档本身没有明显问题。
拿了显示不正确的buffer开始测试,问题好像出在nodejs上?
var actual = new Buffer([0x50, 0x72, 0x65, 0xe7, 0x6f]) // this is the buffer I got
var correct = 'Preço' // This is what I expected to be displayed
console.log('Correct: ', correct)
console.log('Actual:', actual.toString('utf8'))
// Test code per code
console.log(correct.charCodeAt(0) + '=' + parseInt(actual[0]))
console.log(correct.charCodeAt(1) + '=' + parseInt(actual[1]))
console.log(correct.charCodeAt(2) + '=' + parseInt(actual[2]))
console.log(correct.charCodeAt(3) + '=' + parseInt(actual[3]))
console.log(correct.charCodeAt(4) + '=' + parseInt(actual[4]))
输出:
Correct: Preço
Actual: Pre�o
80=80
114=114
101=101
231=231
111=111
如您所见,所有字节对应相同的字符代码!他们怎么会产生不同的结果?
【问题讨论】:
-
你确定是
utf-8? -
@MinusFour 缓冲区肯定是有效的utf8 char码序列,我看了一下utf8表来检查
-
对,所以您试图从
0xe7中获取U+00E7,但事实并非如此。U+00E7在 utf-8 中是0xC3, 0xA7。 -
@MinusFour 成功了...
-
我会尝试看看它是否适用于
binary编码,而不是utf8(使用您的原始缓冲区)
标签: javascript node.js web-crawler