-6ren">
gpt4 book ai didi

ruby - 将 unicode 字符串转换为 Ruby 中的字符?

转载 作者:数据小太阳 更新时间:2023-10-29 07:20:50 26 4
gpt4 key购买 nike

我有以下字符串:

l\u0092issue

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

我试过了

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

最佳答案

您的编码似乎有点困惑。如果你还没有,你应该先阅读 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 如何处理字符编码的文章。 .您还可以查看 String 的 Ruby 文档和 Encoding .

在此特定情况下,字符串 l\u0092issue 表示第二个字符是 unicode 代码点为 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"

不过,这实际上只是对正在发生的事情的演示。真正的解决方案是确保您正确处理编码。

关于ruby - 将 unicode 字符串转换为 Ruby 中的字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21171782/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com