У меня есть столбец NVARCHAR
в моей базе данных. Я не могу преобразовать содержимое этого столбца в обычную строку в моем коде. (Я использую pyodbc
для подключения к базе данных).Ошибка кодирования/декодирования строки - отсутствующий символ с конца
# This unicode string is returned by the database
>>> my_string = u'\u4157\u4347\u6e65\u6574\u2d72\u3430\u3931\u3530\u3731\u3539\u3533\u3631\u3630\u3530\u3330\u322d\u3130\u3036\u3036\u3135\u3432\u3538\u2d37\u3134\u3039\u352d'
# prints something in chineese
>>> print my_string
䅗䍇湥整㐰㤱㔰㜱㔹㔳㘱㘰㔰㌰㈭〶〶ㄵ㐲㔸ⴷㄴ〹㔭
Ближайший я пошел осуществляется через кодирующий его utf-16
как:
>>> my_string.encode('utf-16')
'\xff\xfeWAGCenter-04190517953516060503-20160605124857-4190-5'
>>> print my_string.encode('utf-16')
��WAGCenter-04190517953516060503-20160605124857-4190-5
Но фактическое значение, что мне нужно, как в магазине значений в базе данных:
WAGCenter-04190517953516060503-20160605124857-4190-51
Я пробовал с кодировкой до utf-8
, utf-16
, ascii
, utf-32
, но ничего не работало.
У кого-нибудь есть идея относительно того, чего я не хватает? И как получить желаемый результат от my_string
.
Edit: На превращение его в utf-16-le
, я могу удалить ненужные символы из начала, но еще один символ отсутствует конец
>>> print t.encode('utf-16-le')
WAGCenter-04190517953516060503-20160605124857-4190-5
На попытке некоторых других столбцов, то работает. Что может быть причиной этой прерывистой проблемы?
Вы видите знак байта (BOM) – brianpck
@brianpck Значок порядка байтов в начале + отсутствует 1 в конце. Сейчас я изучаю * Байт-порядок *. Любая идея, почему «1» отсутствует последним? – user7001260
Символы в 'my_string' * - это кодовые точки cjk, так что вряд ли они вернутся из поля' nvarchar'? Если возможно, всегда можно прочитать его как «varchar» с литым выбором select (поле как varchar (xxx)) ... ' –