2010-06-15 7 views
2

J'ai une chaîne hexadécimale et je veux la convertir en utf8 pour insérer mysql. (ma base de données est utf8)Convertir hex en utf en Python

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

Comment puis-je faire cela? Cordialement.

+0

Est-ce que vous définissez hex_string dans votre source ou provient-il d'une source externe? – Sjoerd

Répondre

3

En supposant 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' 
+0

Merci beaucoup, cela fonctionne. Mais y a-t-il un moyen de le faire sans connaître le codage source? – user260223

+1

@user: Voir http://stackoverflow.com/questions/1715772/best-way-to-decode-unknown-unicoding-encoding-in-python-2-5. – kennytm

1

Essayez

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

(cp1254 ou iso-8859-9 sont les codepages turcs, le premier étant le nom usuel sur les plateformes Windows, mais en Python, les deux fonctionnent aussi bien)

1

Tout d'abord vous devez décoder à partir des octets codés que vous avez. Cela semble être ISO-8859-9 (latin-5), ou, si vous utilisez Windows, probablement code page 1254, qui est basé sur latin-5.

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

Si vous sont à l'aide de Windows, puis en fonction de l'endroit où vous obtenez ces octets, il pourrait être plus approprié de les décoder comme mbcs, ce qui se traduit par « selon la page de code du système local utilise '. Si la chaîne est simplement placée dans un fichier .py, il est préférable d'écrire u'kitap araştırması' dans la source et de définir une déclaration -*- coding pour diriger Python vers le décodeur. Voir PEP 263.

Quant à la façon de coder les chaînes unicode UTF-8 pour la base de données, eh bien, si vous voulez vous pouvez le faire manuellement:

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

mais une couche bonne d'accès aux données est susceptible de le faire automatiquement pour vous, si vous avez le COLLATION des tables, les données vont bien.