Декодировать строку с шестнадцатеричными символами в Python 2 - PullRequest
4 голосов
/ 15 июня 2010

У меня есть шестнадцатеричная строка, и я хочу преобразовать ее в utf8, чтобы вставить mysql.(моя база данных utf8)

hex_string = 'kitap ara\xfet\xfdrmas\xfd'
...
result = 'kitap araştırması'

Как я могу это сделать?

Ответы [ 5 ]

4 голосов
/ 15 июня 2010

Предполагая Python 2.6,

>>> print('kitap ara\xfet\xfdrmas\xfd'.decode('iso-8859-9'))
kitap araştırması
>>> 'kitap ara\xfet\xfdrmas\xfd'.decode('iso-8859-9').encode('utf-8')
'kitap ara\xc5\x9ft\xc4\xb1rmas\xc4\xb1'
3 голосов
/ 24 апреля 2018

Try (Python 3.x):

import codecs
codecs.decode("707974686f6e2d666f72756d2e696f", "hex").decode('utf-8')

С здесь .

1 голос
/ 15 июня 2010

Сначала вам нужно декодировать его из имеющихся у вас закодированных байтов. Похоже, что это ISO-8859-9 (латинский-5), или, если вы используете Windows, вероятно, кодовая страница 1254 , которая основана на латинском-5.

>>> 'kitap ara\xfet\xfdrmas\xfd'.decode('cp1254')
u'kitap ara\u015ft\u0131rmas\u0131' # u'kitap araştırması'

Если вы используете Windows, то в зависимости от того, где вы получаете эти байты, может более подходить для их декодирования как mbcs, что переводится в любой код страница, которую использует локальная система '. Если строка просто находится в файле .py, вам лучше написать u'kitap araştırması' в исходном коде и задать объявление -*- coding, чтобы Python мог ее декодировать. См. PEP 263 .

Что касается того, как кодировать строки Unicode в UTF-8 для базы данных, хорошо, если вы хотите, вы можете сделать это вручную:

>>> u'kitap ara\u015ft\u0131rmas\u0131'.encode('utf-8')
'kitap ara\xc5\x9ft\xc4\xb1rmas\xc4\xb1'

, но хороший уровень доступа к данным, вероятно, сделает это автоматически для вас, если у вас есть COLLATION таблиц, в которые данные попадают правильно.

1 голос
/ 15 июня 2010

Попробуйте

hex_string.decode("cp1254").encode("utf-8")

(cp1254 или iso-8859-9 - это турецкие кодовые страницы, первое из которых обычно используется на платформах Windows, но в Python обе одинаково хорошо работают)

0 голосов
/ 15 июня 2010

Строковые литералы объясняет, как использовать строки UTF8 в исходном коде Python.

...