首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将非ASCII字符从ASCII-8位转换为UTF-8

将非ASCII字符从ASCII-8位转换为UTF-8
EN

Stack Overflow用户
提问于 2011-02-02 05:01:23
回答 4查看 76.3K关注 0票数 51

我正在从远程站点提取文本,并尝试将其加载到Ruby1.9/Rails3应用程序中,该应用程序默认使用utf-8。

下面是一些令人不快的文本示例:

代码语言:javascript
复制
Cancer Res; 71(3); 1-11. ©2011 AACR.\n

展开的版权代码如下所示:

代码语言:javascript
复制
Cancer Res; 71(3); 1-11. \xC2\xA92011 AACR.\n

Ruby告诉我字符串被编码为ASCII-8BIT,输入到我的Rails应用程序中会得到这样的结果:

代码语言:javascript
复制
incompatible character encodings: ASCII-8BIT and UTF-8

我可以使用这个正则表达式剥离版权代码。

代码语言:javascript
复制
str.gsub(/[\x00-\x7F]/n,'?')

来生产这个

代码语言:javascript
复制
Cancer Res; 71(3); 1-11. ??2011 AACR.\n

但是,我怎样才能得到一个版权符号(和其他各种符号,如希腊字母),转换成到相同的符号在UTF8?当然这是可能的.

我看到了使用force_encoding的参考,但这不起作用:

代码语言:javascript
复制
str.force_encoding('utf-8').encode

我知道有很多其他人也有类似的问题,但我还没有看到一个有效的解决方案。

EN

回答 4

Stack Overflow用户

发布于 2011-02-02 22:45:32

这对我来说很有效:

代码语言:javascript
复制
#encoding: ASCII-8BIT
str = "\xC2\xA92011 AACR"
p str, str.encoding
#=> "\xC2\xA92011 AACR"
#=> #<Encoding:ASCII-8BIT>

str.force_encoding('UTF-8')
p str, str.encoding
#=> "©2011 AACR"
#=> #<Encoding:UTF-8>
票数 74
EN

Stack Overflow用户

发布于 2012-09-25 23:58:09

有两种可能性:

Ruby 8格式的输入数据已经是-8了,只是

  1. 不知道而已。这似乎就是您的情况,因为"\xC2\xA9“是版权符号的有效UTF-8。在这种情况下,您只需要告诉Ruby数据已经是使用force_encoding的UTF-8格式。

例如,"\xC2\xA9".force_encoding('ASCII-8BIT')将重新创建输入数据的相关位。将演示您可以告诉"\xC2\xA9".force_encoding('ASCII-8BIT').force_encoding('UTF-8')它实际上是UTF-8,并获得所需的结果。

Ruby 8输入数据是某种其他编码,您需要将其转换为

  1. -8。在这种情况下,您必须告诉Ruby当前的编码是什么(ASCII-8BIT是二进制的Ruby语言,它不是真正的编码),然后告诉Ruby对其进行代码转换。

例如,假设您的输入数据是ISO-8859-1。在该编码中,版权符号就是"\xA9“。这将生成这样一小段数据:“\xa9”Ruby (‘ISO-8859-1’),这将演示您可以让.force_encoding将其代码转换为UTF-8:"\xA9".force_encoding('ISO-8859-1').encode('UTF-8')

票数 34
EN

Stack Overflow用户

发布于 2011-09-21 19:26:05

我曾经使用open-uri、iconv和Hpricot抓取希腊Windows编码的页面的脚本这样做:

代码语言:javascript
复制
doc = open(DATA_URL)
doc.rewind
data = Hpricot(Iconv.conv('utf-8', "WINDOWS-1253", doc.readlines.join("\n")))

我相信那是Ruby1.8.7,不知道Ruby1.9是怎么回事

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4867883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档