2016-05-17 45 views
0

我有一個系統在python 2.5中處理文件的所有語言和編碼,我想記錄一些事情,我真的不是非常感興趣的非標準字符,我只願意使用ascii字符到日誌,但是我不時收到類似的錯誤。如何將所有經濟附加到一個字符串

<type 'tuple'>: (<type 'exceptions.UnicodeEncodeError'>, UnicodeEncodeError('ascii', u'Create project: 2016 May European Tour: There\u2019s Still Time to Buy Tickets!', 45, 46, 'ordinal not in range(128)'), <traceback object at 0x105b84908>) 

這是代碼的一些例子,我已經試過:

這個工程的大部分時間,並不總是

self.__log += data.decode('utf-8', 'ignore').encode("utf-8") 

這失敗了,但它的工作在幾個以前的唐沒有工作

self.__log += data.encode('ascii', 'ignore') 

這適用於其他一些情況。

self.__log += data.decode('utf-8', 'replace') 

的日誌現在被定義爲

self.__log = "" 

但我也已經試過

self.__log = u"" 

的問題是,我不是能夠創建了有效的解決方案所有的情況下,我該怎麼辦?

+1

與往常一樣:停止使用字節串。 –

+0

我沒有使用字節串,它們是從使用該服務的人收到的。我不能那樣。 –

+0

還是有辦法去除這些字符?它對我很有用 –

回答

2

如果你不知道你在接受什麼,那就沒有好的和普遍的方法。

如果您熟悉扔掉任何非ASCII和嚴重碼數據時,數據不是ASCII,你可以嘗試這樣的事:

def forceAscii(s): 
    if isinstance(s, unicode): 
    return unicode(s.encode('ascii', 'replace')) 
    elif isinstance(s, basestring): 
    return s.decode('ascii', 'replace').encode('ascii', 'replace') 
    else: 
    raise ValueError('Expected a string, got a %r' % type(s)) 

這會給你一個Unicode字符串,只包含ascii字符,給定任何Unicode或字節字符串。不能強制轉換爲ascii的字符將被替換爲'?'分數。

請注意,某些編碼最終會以一些字符嚴重錯位,例如,映射到不可打印的ascii字符,如\x00

相關問題