我抓了一个包含unicode的网站,结果看起来像是在代码中
a =“\\ u2665 \\ uc624 \\ ube60!\\ uc8fd \\ uae30 \\ uc804 \\ uc5d0”
我是否知道如何在Ruby中将其转换回UTF-8格式的原始Unicode文本?
答案 0 :(得分:1)
答案 1 :(得分:1)
简短的回答:你应该能够'放一个',并看到打印出来的字符串。对我来说,至少,我可以在1.8.7和1.9.2中打印出该字符串
答案很长: 第一件事:它取决于你是否使用ruby 1.8.7或1.9.2,因为处理字符串和编码的方式发生了变化。
1.8.7中的: 字符串只是字节列表。当你打印出来时,如果你的操作系统可以处理它,你可以“放一个”它应该正常工作。如果你做[0],你将得到第一个字节。如果你想得到每一个角色,事情就变得非常棘手了。
在1.9.2中 字符串是具有编码的字节列表。如果网页使用正确的编码发送,则您的字符串应该已经正确编码。如果没有,你将不得不设置它(根据Mike Lewis的回答)。如果你做[0],你将得到第一个字符(心脏)。如果你想要每个字节,你可以做一个.bytes。
答案 2 :(得分:1)
如果您的操作系统出于某种原因正在为您提供那些字面上的ascii字符,那么我以前的答案显然无效,请忽略它。 :P
这是你可以做的:
a.gsub(/\\u([a-z0-9]+)/){|p| [$1.to_i(16)].pack("U")}
这将扫描ascii字符串'\ u'后跟十六进制数字,并将其替换为正确的unicode字符。
答案 3 :(得分:0)
您还可以在打开新的IO
对象时指定编码:http://www.ruby-doc.org/core/classes/IO.html#M000889
与Mike的解决方案相比,如果您在将字符串暴露给应用程序的其余部分之前忘记强制编码,如果有多种机制可以从模块或类中检索字符串,则可以防止出现问题。但是,如果您开始抓取SJIS或KOI-8编码的网站,那么Mike的解决方案将更容易适应Web服务器在其标头中返回的字符编码名称。