【问题标题】:clean up strange encoding in ruby清理 ruby​​ 中的奇怪编码
【发布时间】:2009-12-12 11:00:09
【问题描述】:

我目前正在玩一些 couchdb。
我正在尝试将一些博客数据从 redis(键值存储)迁移到 couchdb(键值存储)。
看到我可能将这些数据从不同的博客引擎迁移到了无数次(每个人都必须有一个爱好:)),似乎有一些编码混乱。
我正在使用 CouchREST 从 ruby​​ 访问 CouchDB,我得到了这个:

<JSON::GeneratorError: source sequence is illegal/malformed>

问题似乎是对象的 body_html 部分:

<Post:0x00000000e9ee18 @body_html="[.....]Wie Sie bereits wissen, m\xF6chte EUserv k\xFCnftig seine  [...]

那些应该是元音变音(“möchte”和“künftig”)。

知道如何摆脱这些问题吗?我在插入之前使用 ruby​​ 1.9 编码功能或 iconv 尝试了一些转换,但还没有任何运气:(

如果我尝试例如使用 ruby​​ 1.9 的 .encode() 方法将这些东西转换为 ISO-8859-1,会发生这种情况(不同的文本,相同的问题):

#<Encoding::UndefinedConversionError: "\xC6\x92" from UTF-8 to ISO-8859-1>

【问题讨论】:

    标签: ruby json encoding character-encoding couchdb


    【解决方案1】:

    我尝试例如将这些东西转换为 ISO-8859-1

    关闭。你实际上想用另一种方式来做:你有得到 ISO-8859-1(*),你想要 UTF-8(**)。所以str.encode('utf-8', 'iso-8859-1') 更有可能做到这一点。

    *:实际上你可能有 Windows 代码页 1252,它类似于 ISO-8859-1,但在 ISO-8859-1 用于控制代码的 0x80-0x9F 范围内有额外的智能引号和内容。如果是这样,请改用'cp1252'

    **:嗯,你可能会。使用 UTF-8 是最好的方法,因此您可以存储所有可能的字符。如果你真的想继续在 ISO-8859-1/cp1252 中工作,那么问题可能只是 Ruby 错误猜测了正在使用的字符集,你可以通过调用 str.force_encoding('iso-8859-1') 来修复它.

    【讨论】:

    • 谢谢!我总是把编码的东西混在一起:(这可能是iso-8859-1,但不知何故,它被声明为UTF8。这有帮助:post.body_html.force_encoding('iso-8859-1').encode("utf -8")
    • 酷!是的,那会做同样的事情。
    猜你喜欢
    • 2011-02-06
    • 2011-08-27
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多