清理ruby中的奇怪编码

时间:2009-12-12 11:00:09

标签: ruby json encoding character-encoding couchdb

我目前正在玩couchdb 我正在尝试将一些博客数据从redis(键值存储)迁移到couchdb(键值存储) 看来我可能会从不同的博客引擎中迁移这些数据(每个人都有一个爱好:)),似乎有一些编码snafus。
我正在使用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>

1 个答案:

答案 0 :(得分:8)

  

我尝试例如将这些东西转换为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错误地猜测了正在使用的字符集,你可以通过调用{{1 }}