C'est une série Python ** 2.x **.
Le code est essayé sur la console de python en exécutant la commande python '' à partir de l'invite de commande sur Terminal sur Mac et sur Windows.
`` Python 2.7.9 '' `.
str est une chaîne de caractères dite multi-octets. 'Chaîne'Ecrire comme.
#### **`len(Chaîne)Ensuite, le nombre d'octets sera retourné. coding: utf-9 pour 8.`**
>>> len('Iroha')
9
for -Si vous le mettez avec in, il sera traité octet par octet..
for c in 'abc': ... print c
a b c
for c in 'Iroha': ... print c
� � � � � � � � �
#### **`unicode.encode()Peut convertir unicode en str avec.`**
>>> u'abc'.encode()
'abc'
Il existe un concept d'encodage.
>>> u'Iroha'.encode('utf-8')
'\xe3\x81\x84\xe3\x82\x8d\xe3\x81\xaf'
>>> u'Iroha'.encode('cp932')
'\x82\xa2\x82\xeb\x82\xcd'
Cela dépend de l'encodage de l'environnement d'exécution. Utf-8
. Lorsqu'il est exécuté sur le terminal de Mac.
>>> 'Iroha'
'\xe3\x81\x84\xe3\x82\x8d\xe3\x81\xaf'
Lorsqu'il est exécuté à partir de l'invite de commande de Windows7,
cp932```.
>>> 'Iroha'
'\x82\xa2\x82\xeb\x82\xcd'
`str``` écrit directement dans le fichier de script suit l'encodage du fichier. Cependant, s'il ne correspond pas à
`` # coding: (encoding name) '', une erreur d'exécution se produira.
#!/usr/bin/env python
# coding: utf-8
print 'Iroha'
↑ est imprimé avec utf-8
, mais si l'encodage de l'environnement CUI est différent, les caractères seront déformés.
unicode traite les chaînes en unités de caractères, pas en octets. u'Chaîne'Préfixe u comme.
#### **`len(Chaîne)Puis**nombre de mots**Sera retourné.`**
>>> len(u'Iroha')
3
for -Si vous le mettez avec in, il sera traité caractère par caractère..
for c in u'abc': ... print c
a b c
for c in u'Iroha': ... print c
je Ro Est
#### **`str.decode()Peut convertir de str en unicode avec.`**
>>> 'Iroha'.decode('utf-8')
u'\u3044\u308d\u306f'
L'encodage d'Unicode est unifié et les développeurs n'ont pas besoin d'être conscients de l'encodage lors de l'utilisation d'Unicode..
u'Irohani' + u'Hoheto'
u'\u3044\u308d\u306f\u306b\u307b\u3078\u3068'
Cependant, lors de la sortie vers l'extérieur du script, il sera toujours converti en `` `` str```.
print u'Iroha'.encode('utf-8')
Iroha
#### **`Si vous ne convertissez pas unicode en str, le runtime de python le convertira automatiquement, mais l'encodage utilisé pour la conversion dépend de l'environnement d'exécution..`**
Un cas courant est lorsque vous essayez de convertir un japonais mixte `str``` avec
coding: ascii et que vous obtenez une exception` `ʻUnicodeEncodeError
...
>>> print u'Iroha'
Traceback (most recent call last):
File "<input>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)
Le fonctionnement sans conversion dépend de l'environnement d'exécution.
Lorsque vous le sortez du script, vous devez en être conscient et le convertir en unicode
-> `` `str```.
À l'intérieur du script, je pense qu'il est préférable de l'unifier en unicode
.
sys.Str obtenu à partir de la bibliothèque, comme args, est immédiatement converti en unicode.
Au contraire, lors de l'impression d'une chaîne de caractères en dehors du script (exemple: `` `print```), elle est convertie en` `ʻunicode```->` `` str``` juste avant l'impression.
#### **`Si vous utilisez un mélange de str et d'unicode, le runtime python essaiera de convertir str en unicode.`**
A ce moment, UnicodeDecodeError
se produit et c'est souvent ennuyeux.
>>> 'Irohani' + u'Hoheto'
Traceback (most recent call last):
File "<input>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 0: ordinal not in range(128)
Lorsque vous ne connaissez pas l'encodage de
strobtenu de l'extérieur du script Je convertis en
unicode``` avec le code suivant.
def toUnicode(encodedStr):
'''
:return: an unicode-str.
'''
if isinstance(encodedStr, unicode):
return encodedStr
for charset in [u'cp932', u'utf-8', u'euc-jp', u'shift-jis', u'iso2022-jp']:
try:
return encodedStr.decode(charset)
except:
pass
Recommended Posts