清理ruby中的奇怪编码

Mar*_*ger 3 ruby encoding json couchdb character-encoding

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

<JSON::GeneratorError: source sequence is illegal/malformed>
Run Code Online (Sandbox Code Playgroud)

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

<Post:0x00000000e9ee18 @body_html="[.....]Wie Sie bereits wissen, m\xF6chte EUserv k\xFCnftig seine  [...]
Run Code Online (Sandbox Code Playgroud)

这些应该是变形金刚("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>
Run Code Online (Sandbox Code Playgroud)

bob*_*nce 8

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

关.你实际上想要反过来做:你 ISO-8859-1(*),你想要 UTF-8(**).所以str.encode('utf-8', 'iso-8859-1')更有可能做到这一点.

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

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