2014-10-31 18 views
1

我使用Python 3.4.2(Windows 7)和Notepad ++ 6.5.5(Windows 7)。Python 3.4/Notepad ++ 6.5十六進制字符替換

當我打開包含國家數據行的file1.txt時,某些字符以白色字體顏色顯示爲xF4,並由黑色背景矩形包圍。我希望Python用正確的字符替換那些xF4:ô。

以下是我想出了,至今:

f1 = open('C:\\ABCD\\file1.txt', 'r') 
f2 = open('C:\\ABCD\\file2.txt', 'w') 
for line in f1: 
    f2.write(line.replace('ô', 'ô')) 
f1.close() 
f2.close() 

它不會做的工作。看來,我寫「ô」的方式就是問題所在。

我希望你對此有所幫助。

+1

你確定這個問題是不是與方式記事本++代表這些字符呢? – Ffisegydd 2014-10-31 09:41:22

+0

你能告訴我們你的文件嗎? – laike9m 2014-10-31 09:44:06

+0

如果我用Windows 7記事本/寫字板打開文件,則確實顯示「ô」。但是,當我嘗試將文件加載到一個sql表中時,加載過程停在包含xF4 /ô的行,並大聲說該字符無效。 – clippertm 2014-10-31 09:59:26

回答

1

它看起來像一個編碼問題。 0xF4確實的ô在Windows 1252字符集(或Latin1的或ISO-8859-1)

但是,如果記事本的代碼++被配置爲使用與顯示UTF8,0xF4中在有效UTF8字符。正確的utf8表示是0xC3,0xB4。

Python是能夠做到的字符集轉換是你想

with open('latin.txt', 'rb') as fdin, open('utf.txt', 'wb') as fdout: 
    for line in fdin: 
     fdout.write(line.decode('latin1').encode('utf8')) 

(所有以二進制方式做是爲了與Python 2和Python 3兼容)

什麼,但一個簡單的替代方法會將Notepad ++配置爲使用latin1字符集。

編輯:

正如Fenikso建議,因爲你說你使用Python3,你也可以這樣做:

with open('latin.txt', 'r', encoding='latin1') as fdin, open('utf.txt', 
     'w', encoding='utf8') as fdout: 
    for line in fdin: 
     fdout.write(line) 
+0

如果'f2'需要一個特定的編碼,爲什麼不把它打開呢?例如。 'f2 = open('C:\\ ABCD \\ file2.txt','w',encoding ='UTF-8')'。 – Fenikso 2014-10-31 10:26:31

+0

@Fenikso因爲這個問題被標記爲'python'而不是'python3',並且這種方式在兩種情況下都起作用。但你是對的,Python3是在標題... – 2014-10-31 10:34:33

+0

感謝Fenikso,這對我有用! – clippertm 2014-11-04 00:46:19

相關問題