2014-10-08 96 views
0

我有一些字符串作爲測試數據粘貼到我的腳本中。這些字符串來自包含編碼字符的電子郵件,它會拋出一個SyntaxError。到目前爲止,我一直無法找到解決這個問題的辦法。當我print repr(string),我得到這些字符串:解碼包含編碼字符的字符串

'Total Value for 1st Load \xe2\x80\x93 approx. $75,200\n' 
'Total Value for 2nd Load \xe2\x80\x93 approx. $74,300\n' 

而這個錯誤彈出,當我運行我的腳本:

SyntaxError: Non-ASCII character '\xe2' in file <filename> on line <line number>, but no 
encoding declared; see http://www.python.org/peps/pep-2063.html 

當我剛打印出含有編碼字符的行我得到這個:

'Total Value for 2nd Load â€「 approx. $74,300' 

的數據是這樣的,當我從電子郵件複製:

'Total Value for 1st Load – approx. $75,200' 
'Total Value for 2nd Load – approx. $74,300' 

從我的搜索中,我相信它是用utf-8編碼的,但是我不知道如何基於某些字符被編碼的事實來處理這些數據,但其中大多數不是(也許?)。我嘗試了迄今爲止發現的各種「解決方案」。包括增加# -*- coding: utf-8 -*-給我的腳本的頂部和腳本只是掛起...它沒有做任何事情:(

如果有人能提供關於如何處理這種情況的一些信息,這將是驚人的。

我一直在使用string.encode()string.decode()試圖解碼和編碼,使用基於什麼我能找到谷歌不同的編碼,但是這並沒有解決問題。

我真的喜歡一個Python的解決方案,因爲這個項目我m的工作需要人們將數據粘貼到GUI中的文本框中,然後處理該數據。其他解決方案建議粘貼t他將數據轉換成單詞或記事本,將其保存爲純文本,然後再從該文件複製/粘貼。這有點多。有人知道處理這個問題的pythonic方式嗎?

+0

*所有*您的字符編碼。恰巧,UTF-8編碼的前128個字符是由ASCII編碼的完全相同的字符。所以'T'在ASCII和UTF-8中都是'\ x84',Python總是顯示ASCII字符而不是字節值。 – 2014-10-08 21:22:20

+0

打印時看到的內容稱爲[Mojibake](http://en.wikipedia.org/wiki/Mojibake); UTF-8字節解釋錯誤,因爲您的控制檯可能設置爲Windows代碼頁1252. – 2014-10-08 21:34:00

+0

添加'# - * - coding:utf-8 - * - '作爲源的第一行或第二行應該已經工作,沒有做任何事情。有些東西你沒有告訴我們。 – 2014-10-08 21:45:50

回答

1
>>> msg = 'Total Value for 1st Load \xe2\x80\x93 approx. $75,200\n' 
>>> print msg.decode("utf-8") 
Total Value for 1st Load – approx. $75,200 

確保你使用類似的空閒,可以支持這些字符(即DOS終端可能不會!)

+0

好吧,我的代碼中有一些其他錯誤,這讓我認爲編碼不起作用,但這是我的錯誤。這是正確的答案。 – DuckPuncher 2014-10-09 00:03:37