J'ai besoin de tester si une chaîne est Unicode, puis si c'est UTF-8. Après cela, obtenez la longueur de la chaîne en octets, y compris BOM , s'il l'utilise jamais. Comment cela peut-il être fait en Python?
Aussi à des fins didactiques, à quoi ressemble une représentation sous forme de liste d'octets d'une chaîne UTF-8? Je suis curieux de voir comment une chaîne UTF-8 est représentée en Python.
Dernier montage: pprint le fait assez bien.
try:
string.decode('utf-8')
print "string is UTF-8, length %d bytes" % len(string)
except UnicodeError:
print "string is not UTF-8"
Dans Python 2, str
est une séquence d'octets et unicode
est une séquence de caractères. Vous utilisez str.decode
pour décoder une séquence d'octets en unicode
et unicode.encode
pour coder une séquence de caractères en str
. Ainsi, par exemple, u"é"
est la chaîne unicode contenant le caractère unique U + 00E9 et peut également s'écrire u"\xe9"
; l'encodage en UTF-8 donne la séquence d'octets "\xc3\xa9"
.
Dans Python 3, cela est modifié; bytes
est une séquence d'octets et str
est une séquence de caractères.
Pour vérifier si Unicode
>>>a = u'F'
>>>isinstance(a, unicode)
True
Pour vérifier si c'est UTF-8 ou ASCII
>>>import chardet
>>>encoding = chardet.detect('AA')
>>>encoding['encoding']
'ascii'
Je recommanderais certainement le Joel Spolsky The Absolute Minimum Every Software Developer Absolutely, Positively Must Know about Unicode and Character Sets (No Excuses!) , si vous ne l'avez pas déjà lu.
Pour l'Unicode de Python et les machines de codage/décodage, démarrez ici . Pour obtenir la longueur d'octet d'une chaîne Unicode encodée en utf-8, vous pouvez faire:
print len(my_unicode_string.encode('utf-8'))
Votre question est balisée python-2.5, mais sachez que cela change quelque peu dans Python 3+.