【问题标题】:Convert a unicode string to characters in Ruby?将 unicode 字符串转换为 Ruby 中的字符?
【发布时间】:2014-01-16 20:07:13
【问题描述】:

我有以下字符串:

l\u0092issue

我的问题是如何将其转换为 utf8 字符?

我试过了

1.9.3p484 :024 > "l\u0092issue".encode('utf-8')
 => "l\u0092issue" 

【问题讨论】:

    标签: ruby string


    【解决方案1】:

    您的编码似乎有些混乱。如果你还没有,你应该先阅读Joel Spolsky’s article The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!),它很好地介绍了这种类型的东西。在http://graysoftinc.com/character-encodings/understanding-m17n-multilingualization 上有一组很好的关于 Ruby 如何处理字符编码的文章。您还可以查看 StringEncoding 的 Ruby 文档。

    在这种特定情况下,字符串l\u0092issue 表示第二个字符是unicode codepoint 0x92 的字符。这个代码点是PRIVATE USE TWO(见chart),这基本上意味着这个位置没有被使用。

    但是,查看Windows CP-1252 encoding,位置 0x92 被字符 占据,所以如果这是缺少的字符,则字符串将是 l’issue,即使我没有,看起来更有可能'不会说法语。

    我怀疑发生的事情是您的程序收到了以 CP-1252 编码的字符串 l’issue,但假设它是以 ISO-8859-1 编码的(ISO-8859-1 和 CP-1252 密切相关)并且将其重新编码为 UTF-8,留下您现在拥有的字符串。

    真正的解决方法是小心进入(和离开)程序的任何字符串的编码,以及如何管理它们。

    要将您的字符串转换为l’issue,您可以将encode 转换回ISO-8859-1,然后使用force_encoding 告诉Ruby CP-1252 的真实 编码,然后您可以重新编码为UTF-8:

    2.1.0 :001 > s = "l\u0092issue"
     => "l\u0092issue" 
    2.1.0 :002 > s = s.encode('iso-8859-1')
     => "l\x92issue" 
    2.1.0 :003 > s.force_encoding('cp1252')
     => "l\x92issue" 
    2.1.0 :004 > s.encode('utf-8')
     => "l’issue"
    

    这只是对正在发生的事情的真正演示。真正的解决方案是确保正确处理编码。

    【讨论】:

    • 这真的帮了我很大的忙。我遇到了 \u0092 的确切问题..谢谢..你太棒了!
    • 要在 IRB 中打印,您必须编码、强制编码,然后重新编码。从答案中我不清楚这一点。 "l\u0092issue".encode('iso-8859-1').force_encoding('cp1252').encode('utf-8')
    【解决方案2】:

    编码为 UTF-8(除非您更改了原始字符串编码)。当您inspect 字符串时,Ruby 只是向您显示转义序列(这就是 IRB 这样做的原因)。 \u0092this character 的转义序列。

    如果您的终端字体支持,请尝试puts "l\u0092issue" 查看呈现的字符。

    【讨论】:

    • 这对我不起作用。 "l\u0092issue".encode('iso-8859-1').force_encoding('cp1252').encode('utf-8') 显示正确的字符,但 puts "l\u0092issue" 不显示。
    猜你喜欢
    • 2013-01-30
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    • 2017-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多