我正在开发一个小型网络爬虫......
我遇到了重音问题,例如,当我Apuntó
控制台(cmd.exe)显示puts
时,网页上有一个apunt├│
字,我认为是与cmd编码相关的东西,但当我将其打印到文件时,我得到了确切的apunt├│
字......
如果我执行puts "apuntó"
输出正确,我会apuntó
知道发生了什么事吗?
谢谢!
答案 0 :(得分:4)
看起来你需要去了解角色编码。一个好的起点是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,因此它们显示为├
0xc3
和│
} 0xb3
。
处理此问题的方法是确保每次任何文本从外部进入您的程序时,您都知道文本所处的编码,并对其进行适当的解释。在网页的情况下,这可能是一个棘手的问题,因为可以在一些地方指定编码,包括页面本身中的 。
当你对字符编码有更多了解时,你应该更清楚你需要做什么。