2017-02-07 65 views
0

我有一個所謂unicode字符串是這樣的:Python的 - 轉換unicode和十六進制爲Unicode

U'\ XC3 \ XA3 \ XC6 \ u2019 \ XC2版權所有\ xA9 \ XC3 \ XA3 \ XC6 \ u2019 \ XE2 \ u20ac \ u201c \ XC3 \ XA3 \ XC6 \ u2019 \ XC2版權所有\ xA9 \ XC3 \ XA3 \ XE2 \ u20ac \ u016​​1 \ XC2 \ XA4 \ XC3 \ XA3 \ XC6 \ u2019 \ XE2 \ u20ac \ u201c \ XC3 \ XAF \ XC2 \ XBC \ XC2 \ X81 \ XC3 \ XA3 \ XE2 \ u20ac \ u016​​1 \ XC2 \ xb9 \ XC3 \ XA3 \ XE2 \ u20ac \ u016​​1 \ XC2 \ XAF \ XC3 \ XA3 \ XC6 \ u2019 \ XC2 \ XBC \ XC3 \ XA3 \ XC6 \ u2019 \ XC2 \ XAB \ XC3 \ XA3 \ XE2 \ u20ac \ u016​​1 \ XC2 \ XA2 \ XC3 \ XA3 \ XE2 \ u20ac \ u016​​1 \ XC2 \ XA4 \ XC3 \ XA3 \ XC6 \ u2019 \ XE2 \ u20ac \ XB0 \ XC3 \ XA3 \ XC6 \ u2019 \ XC2 \ XAB \ XC3 \ XA3 \ XC6 \ u2019 \ XE2 \ u20ac \ XA2 \ XC3 \ XA3 \ XE2 \ u20ac \ u016​​1 \ XC2 \ XA7 \ XC3 \ XA3 \ XE2 \ u20ac \ u016​​1 \ XC2 \ xb9 \ XC3 \ XA3 \ XC6 \ u2019 \ XE2 \ u20ac \ XA0 \ XC3 \ XA3 \ XE2 \ u20ac \ u016​​1 \ XC2 \ XA3 \ XC3 \ XA3 \ XC6 \ u2019 \ XC2 \ X90 \ XC3 \ XA3 \ XC6 \ u2019 \ XC2 \ XAB \ XC3 \ XAF \ XC2 \命苦\ X CB \ u2020 \ XC3 \ XA3 \ XE2 \ u20ac \ u016​​1 \ XC2 \ xb9 \ XC3 \ XA3 \ XE2 \ u20ac \ u016​​1 \ XC2 \ XAF \ XC3 \ XA3 \ XC6 \ u2019 \ XE2 \ u20ac \ XA2 \ XC3 \ XA3 \ XE2 \ u20ac \ u016​​1 \ XC2 \ XA7 \ XC3 \ XA3 \ XE2 \ u20ac \ u016​​1 \ XC2 \ xb9 \ XC3 \ XAF \ XC2 \命苦\ XE2 \ u20ac \ XB0'

我如何得到正確的unicode字符串了嗎?我認爲,實際的Unicode值是ラブライブ!スクールアイドルフェスティバル(スクフェス)

+2

這是一個變爲亂碼。你是如何得到這個價值的?它被錯誤地解碼。 –

+0

你對「unicode string」的含義感到困惑。 –

+1

更好的是,這被**兩次**。 UTF-8,解碼爲CP1252,然後再次編碼爲UTF-8,然後再次解碼爲CP1252。非常棒! –

回答

5

您有一個Mojibake,一個錯誤解碼的文本。

可以使用ftfy library對聯合國造成的破壞:

>>> from ftfy import fix_text 
>>> fix_text(s) 
u'\u30e9\u30d6\u30e9\u30a4\u30d6!\u30b9\u30af\u30fc\u30eb\u30a2\u30a4\u30c9\u30eb\u30d5\u30a7\u30b9\u30c6\u30a3\u30d0\u30eb(\u30b9\u30af\u30d5\u30a7\u30b9)' 
>>> print fix_text(s) 
ラブライブ!スクールアイドルフェスティバル(スクフェス) 

ftfy,您的數據編碼成UTF-8,然後解碼與Windows代碼頁1252;該ftfy.fixes.fix_one_step_and_explain() function顯示了修復步驟需要:

>>> ftfy.fixes.fix_one_step_and_explain(s)[-1] 
[(u'encode', u'sloppy-windows-1252', 0), (u'decode', u'utf-8', 0)] 

(需要的'sloppy' encoding,因爲不是所有的UTF-8字節可以被解碼爲cp1252,但一些不良的解碼器,然後只複製原始字節;特殊的編解碼器逆轉這一進程)。

事實上,在你的情況下,這樣做是兩次,而不是一個壯舉我以前見過:

>>> print s.encode('sloppy-cp1252').decode('utf8').encode('sloppy-cp1252').decode('utf8') 
ラブライブ!スクールアイドルフェスティバル(スクフェス) 
+0

真棒,ftfy的作品。我從API獲得了這個值。我被告知在PHP中使用了以下函數。 mb_convert_encoding($ program_name,'UTF-8','UTF-8'); – Sri

+0

@Sri:他們對此做得更多;無論如何,從UTF-8到UTF-8的重新編碼是無用的。 –

+1

我明白了。我已將此網頁網址轉發給客戶端。我希望他/她會解決它。 – Sri

相關問題