2012-10-09 103 views
1

我正在構建一個需要兩個文件的程序,經過一些處理後,我必須比較這些文件的某些部分。控制檯中的Python xYZ字符

舉個例子,當我打印兩個字符串我想比較,它看起來像這樣:

CSV = 'UC013. MANTER ITEM DE NOTA FISCAL/NOTA DE SERVI\xc3\x87O/RECIBO' 
DOC = 'UC013. MANTER ITEM DE NOTA FISCAL/NOTA DE SERVI\xc7O/RECIBO' 

兩者應該是相同的:

'UC013. MANTER ITEM DE NOTA FISCAL/NOTA DE SERVIÇO/RECIBO' 

我怎樣才能打印在控制檯中正確的字符並正確比較字符串?

非常感謝您的幫助。

回答

3

你有兩個不同編碼的文件,第一個是utf-8(CSV),第二個latin1(DOC)。如果你想比較它們,你必須首先解碼它們到unicode:

CSV = 'UC013. MANTER ITEM DE NOTA FISCAL/NOTA DE SERVI\xc3\x87O/RECIBO' 
DOC = 'UC013. MANTER ITEM DE NOTA FISCAL/NOTA DE SERVI\xc7O/RECIBO' 
CSV = CSV.decode('utf-8') 
DOC = DOC.decode('latin1') 
print(CSV == DOC) # True 
+0

感謝您的詳細解答。現在,我使用相同的編碼獲得了兩個字符串,但是當我在控制檯上打印它們時,我仍然得到了這樣的事情:'UC019。 MANTER PRODUTO - CONFEC \ xc7 \ xc3O'。我應該能夠使用CSV.decode('unicode_escape')正確地打印字符,但是我得到:UnicodeEncodeError:'ascii'編解碼器無法編碼位置25-26中的字符:序號不在範圍(128)中。請幫忙嗎? –

+0

我注意到我的日誌記錄模塊是壞的...如果我只是使用打印,它工作正常...我不知道如何解決這個問題。非常感謝我們的幫助! –

+0

如果您嘗試將非ASCII字符寫入不支持它的控制檯,python不會喜歡。你使用哪個控制檯和操作系統?如果python無法確定控制檯使用哪種編碼(通常通過查看「LANG」環境變量),則「sys.stdout.encoding」默認爲「ANSI_X3.4-1968」。嘗試設置一個合理的輸出編碼... – mata