2016-05-17 3 views
0

У меня есть система в python 2.5, которая обрабатывает файлы на всех языках и кодирует, я хочу регистрировать некоторые вещи, и меня не интересуют нестандартные символы, m готовы использовать только атрибуты 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") 

Это не удалось, но он работал на нескольких предыдущих дону 't work

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

Это сработало для некоторых других случаев.

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

бревно прямо сейчас определяется как

self.__log = "" 

Но я также попытался с

self.__log = u"" 

Проблема заключается в том, что им не удалось создать решение, которое работает для все дела, что я должен делать?

+1

Как всегда: прекратите использование байтов. –

+0

Я не использую bytestrings, они получены от людей, которые пользуются услугой. Я не могу об этом. –

+0

или есть способ снять эти символы? он будет работать для меня –

ответ

2

Если вы не знаете, что получаете, нет никакого приятного и универсального способа.

Если вы комфортно с выбрасывая ничего не-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.