清理Ruby中的奇怪编码

3

我目前正在尝试使用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  [...]

这些应该是Umlauts(“möchte”和“künftig”)。

有什么想法可以解决这些问题吗?我尝试使用Ruby 1.9编码功能或在插入之前使用iconv进行一些转换,但始终没有成功:(

如果我尝试将这些内容转换为ISO-8859-1,使用Ruby 1.9的.encode()方法,会发生以下情况(不同的文本,同样的问题):

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

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')来解决。


谢谢!我总是搞混编码的问题 :(
这可能是iso-8859-1,但不知道怎么回事,它被声明为UTF8了。
这很有帮助:
post.body_html.force_encoding('iso-8859-1').encode("utf-8")
- Marc Seeger
很酷!没错,那会做同样的事情。 - bobince

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接