2016-10-07 56 views
0

我有一個文本文件充滿Unicode字符作爲"\ud83d\udca5"但python似乎並不喜歡他們。
但是,如果我將其替換爲u'\U0001f4a5'這似乎是他的蟒蛇逃生風格(Charbase),它的工作原理。如何將「 uxxxx uxxxx」轉換爲u' Uxxxxxxxx'?

是否有解決方案將它們全部轉換爲u"\Uxxxxxxxx"轉義格式比python可以理解?

謝謝。

+1

這是因爲這是UTF-16,而不是UTF-8。 – Joey

+0

@Joey:這不是(整個)點。 Unicode對象和編碼的字節序列(由UTF-16,UTF-8或任何其他編碼)之間存在根本區別。 –

+0

是的,我想是的,但我有一個UTF-8文件的UTF-16字符。 這就是問題所在。 – DasFranck

回答

0

你在混合使用Unicode和編碼的字符串。 u'\U0001f4a5'是一個Unicode對象,用於處理字符串的Python內部數據類型。 (在Python 3中,u是可選的,因爲現在所有的字符串都是Unicode對象)。

另一方面,文件使用編碼。 UTF-8是最常見的一種,但它只是將一個Unicode對象存儲在面向字節的文件或流中的一種方式。打開這樣的文件時,您需要指定編碼,以便Python可以將字節轉換爲有意義的Unicode對象。

就你而言,你似乎需要使用UTF-16編解碼器而不是UTF-8來打開文件。

with open("myfile.txt", encoding="utf-16") as f: 
    s = f.read() 

會給你適當的內容,如果編解碼器實際上是UTF-16。如果看起來不正確,請嘗試使用"utf-16-le""utf-16-be"

+0

嗯,我試過,但是當我用'''utf-16'''打開文件時,我有: '''UnicodeDecodeError:'utf-16-le'編解碼器無法解碼9526- 9527:非法的UTF-16代理'''。 與'''utf-16-be'''一樣,我可以用'''utf-8'''打開它,但是遇到\ uxxxx \ uxxxx問題。 – DasFranck

+0

然後它完全使用不同的編碼。不幸的是,沒有辦法可靠地確定編碼 - 你需要檢查文件的來源。你能發佈一個相關的文件樣本嗎? –

相關問題