2009-12-12 24 views
2

我目前正在玩couchdb。
我試圖將一些博客數據從redis(鍵值存儲)遷移到couchdb(鍵值存儲)。
鑑於我可能將這些數據從不同的博客引擎遷移到不同的博客引擎(每個人都必須有一個興趣愛好:)),似乎有一些編碼snafus。
我使用CouchREST從紅寶石訪問CouchDB的,我得到這個:清理ruby中的奇怪編碼

<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的轉換,但還沒有運氣:(

如果我嘗試使用.encode()方法將這些內容轉換爲ISO-8859-1紅寶石1.9,這是發生了什麼(不同的文字,同樣的問題):

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

回答

7

我嘗試如的東西轉換成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')來修復它。

+0

謝謝!我總是混合編碼的東西了:( 這可能是iso-8859-1,但不知何故沿途,它得到了宣佈UTF8。 這有助於: post.body_html.force_encoding('iso-8859-1')。encode (「utf-8」) – 2009-12-12 11:35:05

+0

很酷!是的,那會做同樣的事情。 – bobince 2009-12-12 11:39:24