Преобразуйте или разделите “недопустимые” символы Unicode

У меня есть база данных в MSSQL, который я портирую на SQLite/Django. Я использую pymssql, чтобы соединиться с базой данных и сохранить текстовое поле к локальной базе данных SQLite.

Однако для некоторых символов, это взрывается. Я получаю жалобы как это:

UnicodeDecodeError: 'ascii' codec can't decode byte 0x97 in position 1916: ordinal not in range(128)

Есть ли некоторый способ, которым я могу преобразовать символы в надлежащие unicode версии? Или разделите их?

7
задан Oli 24 March 2010 в 15:14
поделиться

2 ответа

Как только у вас будет строка байтов s, вместо того, чтобы использовать ее в качестве юникода obj напрямую, преобразуйте ее явно с правильным кодеком, например:

u = s.decode('latin-1')

и используйте u вместо s в коде, который следует за этим пунктом (предположительно, часть, которая записывает в sqlite). Это предполагает, что latin-1 - это кодировка, которая использовалась для создания байтовой строки изначально - нам невозможно догадаться, поэтому попытайтесь выяснить ;-).

Как правило, я предлагаю: не обрабатывайте в своих приложениях текст в виде закодированных байтовых строк - декодируйте их в объекты Unicode сразу после ввода и, при необходимости, кодируйте их обратно в байтовые строки прямо перед выводом.

11
ответ дан 6 December 2019 в 08:14
поделиться

При декодировании просто передайте 'ignore', чтобы удалить эти символы

есть еще один способ удаления / преобразования этих символов

'replace': replace malformed data with a suitable replacement marker, such as '?' or '\ufffd' 

'ignore': ignore malformed data and continue without further notice 

'backslashreplace': replace with backslashed escape sequences (for encoding only) 

Test

>>> "abcd\x97".decode("ascii")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0x97 in position 4: ordinal not in range(128)
>>>
>>> "abcd\x97".decode("ascii","ignore")
u'abcd'
11
ответ дан 6 December 2019 в 08:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: