web-dev-qa-db-fra.com

Qu'est-ce qu'une chaîne Unicode?

Qu'est-ce qu'une chaîne Unicode exactement?

Quelle est la différence entre une chaîne régulière et une chaîne unicode?

Qu'est-ce que l'UTF-8?

J'essaie d'apprendre Python en ce moment, et j'entends toujours ce mot à la mode. Que fait le code ci-dessous?

Chaînes i18n (Unicode)

> ustring = u'A unicode \u018e string \xf1'
> ustring
u'A unicode \u018e string \xf1'

## (ustring from above contains a unicode string)
> s = ustring.encode('utf-8')
> s
'A unicode \xc6\x8e string \xc3\xb1'  ## bytes of utf-8 encoding
> t = unicode(s, 'utf-8')             ## Convert bytes back to a unicode string
> t == ustring                      ## It's the same as the original, yay!
True

Fichiers Unicode

import codecs

f = codecs.open('foo.txt', 'rU', 'utf-8')
for line in f:
# here line is a *unicode* string
25
Stevanus Iskandar

Cette réponse concerne environ Python 2. Dans Python 3, str est une chaîne Unicode.

Le type str de Python est une collection de caractères 8 bits. L'alphabet anglais peut être représenté à l'aide de ces caractères 8 bits, mais pas les symboles tels que ±, ♠, Ω et ℑ.

nicode est une norme pour travailler avec un large éventail de caractères. Chaque symbole a un point de code (un nombre), et ces points de code peuvent être codés (convertis en une séquence d'octets) à l'aide d'une variété de codages.

TF-8 est l'un de ces encodages. Les points de code bas sont codés à l'aide d'un seul octet, et les points de code supérieurs sont codés sous forme de séquences d'octets.

Le type unicode de Python est une collection de points de code. La ligne ustring = u'A unicode \u018e string \xf1' Crée une chaîne Unicode avec 20 caractères.

Lorsque l'interpréteur Python affiche la valeur de ustring, il échappe deux des caractères (Ǝ et ñ) car ils ne se trouvent pas dans la plage imprimable standard.

La ligne s = unistring.encode('utf-8') code la chaîne Unicode en utilisant UTF-8. Cela convertit chaque point de code en octet ou séquence d'octets appropriée. Le résultat est une collection d'octets, qui est retournée sous la forme d'un str. La taille de s est de 22 octets, car deux des caractères ont des points de code élevés et sont codés comme une séquence de deux octets plutôt que comme un seul octet.

Lorsque l'interpréteur Python affiche la valeur de s, il échappe quatre octets qui ne sont pas dans la plage imprimable (\xc6, \x8e, \xc3 Et \xb1). Les deux paires d'octets ne sont pas traitées comme des caractères uniques comme auparavant parce que s est de type str, pas unicode.

La ligne t = unicode(s, 'utf-8') fait le contraire de encode(). Il reconstruit les points de code d'origine en examinant les octets de s et en analysant les séquences d'octets. Le résultat est une chaîne Unicode.

L'appel à codecs.open() spécifie utf-8 Comme encodage, qui indique Python pour interpréter le contenu du fichier (une collection d'octets) comme une chaîne Unicode qui a été encodé en UTF-8.

44
tom