ruby - 将非 ASCII 字符从 ASCII-8BIT 转换为 UTF-8

标签 ruby utf-8 internationalization

我正在从远程站点提取文本并尝试将其加载到默认使用 utf-8 的 Ruby 1.9/Rails 3 应用中。

这是一些违规文本的示例:

Cancer Res; 71(3); 1-11. ©2011 AACR.\n

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

Cancer Res; 71(3); 1-11. \xC2\xA92011 AACR.\n

Ruby 告诉我字符串被编码为 ASCII-8BIT 并且输入我的 Rails 应用程序让我得到这个:

incompatible character encodings: ASCII-8BIT and UTF-8

我可以使用这个正则表达式去除版权代码

str.gsub(/[\x00-\x7F]/n,'?')

产生这个

Cancer Res; 71(3); 1-11. ??2011 AACR.\n

但我怎样才能将版权符号(以及各种其他符号,如希腊字母)转换为 UTF-8 中的相同符号?当然有可能...

我看到对使用 force_encoding 的引用,但这不起作用:

str.force_encoding('utf-8').encode

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

最佳答案

这对我有用:

#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>

关于ruby - 将非 ASCII 字符从 ASCII-8BIT 转换为 UTF-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4867883/

相关文章:

Ruby 正则表达式匹配意外字符

arrays - 将数据库中现有的字符串字段类型转换为数组字段类型 | Rails + PostgreSQL

mysql - 重构一个简单的脚本来清理 ruby​​ 中的 mysql 数据库

php - DOCX 编码问题

php - 如何将 Unicode 特殊字符转换为 html 实体?

c - 操作系统范围的语言本地化?

ruby - 使用 QtRuby 获取对发射小部件的引用

javascript - 在 Javascript 中显示 unicode 字符(表情符号)

C++ i18n 解决方案

android - 如何国际化 ic_launcher 图标?