我正在从远程站点提取文本并尝试将其加载到默认使用 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/