我正在开发一个小型网络爬虫...
我遇到了重音问题,例如,当我 put
控制台 (cmd.exe) 向我显示 apunt 时,如果网页有一个
,我认为这与 cmd 编码有关,但是当我将其打印到文件时,我得到了准确的 Apuntó
词├│apunt├│
字...
如果我执行 puts "apuntó"
输出是正确的,我得到 apuntó
知道发生了什么吗?
谢谢!
最佳答案
看来你需要去了解一下字符编码。一个好的起点是 Joel Spolsky 的文章 The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) .之后我会推荐 James Gray 的 series of blog post on character encoding in Ruby .
在您的情况下,情况是这样的。当您的爬虫抓取网页时,单词 Apuntó
被抓取为字节
0x41 0x70 0x75 0x6e 0x74 0xc3 0xb3
这是UTF-8词的编码。在这种编码中,字母 ó
被编码为两个字节,0xc3
和 0xb3
。然而,您的软件不知道编码,并假定字节代表默认字符集中的字符,看起来像 codepage 437。 ,因此它们显示为 ├
for 0xc3
和 │
for 0xb3
。
处理此问题的方法是确保每次任何文本从外部进入您的程序时您都知道该文本的编码,并对其进行适当的解释。对于网页,这可能有点棘手,因为可以在几个地方指定编码,包括在页面本身中。
当您对字符编码了解更多时,应该会更清楚您需要做什么。
关于ruby - 从网络请求中读取的字符串中删除重音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14802477/