ruby - 从网络请求中读取的字符串中删除重音

标签 ruby encoding

我正在开发一个小型网络爬虫... 我遇到了重音问题,例如,当我 put 控制台 (cmd.exe) 向我显示 apunt 时,如果网页有一个 Apuntó 词├│,我认为这与 cmd 编码有关,但是当我将其打印到文件时,我得到了准确的 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词的编码。在这种编码中,字母 ó 被编码为两个字节,0xc30xb3。然而,您的软件不知道编码,并假定字节代表默认字符集中的字符,看起来像 codepage 437。 ,因此它们显示为 for 0xc3 for 0xb3

处理此问题的方法是确保每次任何文本从外部进入您的程序时您都知道该文本的编码,并对其进行适当的解释。对于网页,这可能有点棘手,因为可以在几个地方指定编码,包括在页面本身中。

当您对字符编码了解更多时,应该会更清楚您需要做什么。

关于ruby - 从网络请求中读取的字符串中删除重音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14802477/

相关文章:

c# - .Net 4.0 中的 ISO_IR 58 支持

excel - pear Excel Writer 编码

ruby - Rspec 有 (n).items 未定义的方法

ruby - Ruby 中的Scheme 动态风的等价物

ruby-on-rails - 自动创建缺失的连接模型

encoding - 为什么两个文本和编码相同但大小不同的文件?

linux - 当我按下键盘上的一个键并且它显示在 shell 上时,实际发生的 Action 路径是什么?

ios - 如何解决 NULL cString 崩溃

ruby-on-rails - 为什么我无法安装 JSON gem?

ruby - 解释 Ruby 的 Kernel::system 方法的附加参数