Je suis en train de programmer en Python 3 et j'ai un petit problème sur lequel je ne trouve aucune référence sur le net. Pour autant que je comprenne la chaîne par défaut dans utf-16, mais je dois travailler avec utf-8, je ne trouve pas la commande qui convertira de la valeur par défaut à utf-8. J'apprécierais beaucoup votre aide.Conversion de utf-16 en utf-8 en Python 3
Répondre
En Python 3, deux types de données différents sont importants lorsque vous manipulez des chaînes de caractères. Il y a d'abord la classe de chaînes, un objet qui représente les points de code Unicode. Il est important d'obtenir que cette chaîne ne soit pas composée de quelques octets, mais réellement d'une séquence de caractères. Deuxièmement, il y a la classe bytes, qui est juste une séquence d'octets, représentant souvent une chaîne stockée dans un encodage (comme utf-8 ou iso-8859-15).
Qu'est-ce que cela signifie pour vous? Autant que je sache, vous voulez lire et écrire des fichiers utf-8. Faisons un programme qui remplace tous les « æ » par «Ç'a personnages
def main():
# Let's first open an output file. See how we give an encoding to let python know, that when we print something to the file, it should be encoded as utf-8
with open('output_file', 'w', encoding='utf-8') as out_file:
# read every line. We give open() the encoding so it will return a Unicode string.
for line in open('input_file', encoding='utf-8'):
#Replace the characters we want. When you define a string in python it also is automatically a unicode string. No worries about encoding there. Because we opened the file with the utf-8 encoding, the print statement will encode the whole string to utf-8.
print(line.replace('ć', 'ç'), out_file)
Quand devriez-vous utiliser des octets? Pas souvent. Un exemple que je pourrais penser serait quand vous lisez quelque chose d'une prise. Si vous avez ceci dans un objet bytes, vous pouvez en faire une chaîne unicode en faisant bytes.decode ('encoding') et vice versa avec str.encode ('encoding'). Mais comme dit, probablement vous n'en aurez pas besoin.
encore, parce qu'il est intéressant, ici à la dure, où vous encodez tout vous:
def main():
# Open the file in binary mode. So we are going to write bytes to it instead of strings
with open('output_file', 'wb') as out_file:
# read every line. Again, we open it binary, so we get bytes
for line_bytes in open('input_file', 'rb'):
#Convert the bytes to a string
line_string = bytes.decode('utf-8')
#Replace the characters we want.
line_string = line_string.replace('ć', 'ç')
#Make a bytes to print
out_bytes = line_string.encode('utf-8')
#Print the bytes
print(out_bytes, out_file)
Bonne lecture sur ce sujet (encodages frets) est http://www.joelonsoftware.com/articles/Unicode.html. Vraiment recommandé lire!
Source: http://docs.python.org/release/3.0.1/whatsnew/3.0.html#text-vs-data-instead-of-unicode-vs-8-bit
(PS Comme vous le voyez, je ne l'ai pas mentionné utf-16 dans ce post, je ne sais pas vraiment si python utilise comme décodage interne ou non, mais il est totalement hors de propos. Au moment où vous travaillez avec une chaîne de caractères, vous travaillez avec des caractères (points de code), et non avec des octets
- 1. UTF8 et conversion utf16
- 2. Win1251-> conversion UTF16
- 3. Conversion de UTF8 en ASCII
- 4. Sortie DataTable XML en UTF8 plutôt que UTF16
- 5. Problème de conversion utf8 bizarre en php
- 6. Conversion UTF8 (Cotée imprimable) en C# question
- 7. Python 3: Conversion d'image en niveaux de gris
- 8. La conversion de ces types de unicode UTF8 en PHP
- 9. Conversion de tables mysql de latin1 en utf8
- 10. Conversion de C-Strings de l'encodage local en UTF8
- 11. Conversion de noms de domaine en idn en python
- 12. Cordes en Python 3
- 13. Convertir un codepoint unicode en hexadécimal UTF8 en python
- 14. Conversion de C en Actionscript 3?
- 15. Conversion de la définition de la fonction Python 2.x en Python 3.x
- 16. Conversion Hex NSString et UTF8
- 17. Conversion de code Python en PHP
- 18. encodage Python ISO UTF8
- 19. Conversion d'une chaîne en liste en Python
- 20. Python 2 dict_items.sort() en Python 3
- 21. Conversion automatique de chaîne en nombre en Python
- 22. Conversion de variables python en variables javascript
- 23. Conversion Python de chaîne binaire en hexadécimal
- 24. Conversion de Python datetime en rfc 2822
- 25. greding fichiers binaires et UTF16
- 26. Convertir latin1 en utf8?
- 27. Conversion de traversée de graphe en multitraitement en Python
- 28. Conversion de séries de chaînes en liste flottante en python
- 29. Est-il possible de convertir du texte UTF32 en UTF16 en utilisant uniquement l'API Windows?
- 30. Conversion de float en int plus rapide en Python
Python utilise UTF-16 comme codage interne sous Windows.Sur Linux, il utilise UTF-32 – dan04
hi , merci pour vos réponses Dan04 savez-vous comment puis-je lui dire d'utiliser seulement utf-8? – idan
@idan Pourquoi voudriez-vous cela? En tout cas, il est pas possible sauf quand vous modifiez et recompilez Python vous-même ... –