[PYTHON] str und unicode

Es ist eine Python ** 2.x ** Serie.

Der Code wird auf der Python-Konsole versucht, indem der Befehl `python``` an der Eingabeaufforderung auf dem Terminal unter Mac und Windows ausgeführt wird. `Python 2.7.9```.

Was ist str?

str ist eine sogenannte Multi-Byte-Zeichenfolge. 'String'Schreiben Sie wie.




#### **`len(String)Dann wird die Anzahl der Bytes zurückgegeben. coding: utf-9 für 8.`**
>>> len('Iroha')

9

for -Wenn Sie es mit in drehen, wird es byteweise verarbeitet..



for c in 'abc': ... print c

a b c


for c in 'Iroha': ... print c

� � � � � � � � �



#### **`unicode.encode()Kann von Unicode nach Str mit konvertieren.`**
>>> u'abc'.encode()

'abc'

Es gibt ein Konzept der Codierung.

>>> u'Iroha'.encode('utf-8')

'\xe3\x81\x84\xe3\x82\x8d\xe3\x81\xaf'
>>> u'Iroha'.encode('cp932')

'\x82\xa2\x82\xeb\x82\xcd'

Dies hängt von der Codierung der Ausführungsumgebung ab. `` `Utf-8```. Bei Ausführung auf dem Terminal des Mac.

>>> 'Iroha'

'\xe3\x81\x84\xe3\x82\x8d\xe3\x81\xaf'

Bei Ausführung an der Eingabeaufforderung von Windows7 `` `cp932```.

>>> 'Iroha'

'\x82\xa2\x82\xeb\x82\xcd'

`str``` direkt in die Skriptdatei geschrieben folgt der Codierung der Datei. Wenn es jedoch nicht mit # encoding: (encoding name) `` übereinstimmt, tritt ein Laufzeitfehler auf.

#!/usr/bin/env python
# coding: utf-8

print 'Iroha'

↑ wird mit `` `utf-8``` gedruckt, aber wenn die Codierung der CUI-Umgebung unterschiedlich ist, werden die Zeichen verstümmelt.

Was ist Unicode?

Unicode behandelt Zeichenfolgen in Zeicheneinheiten, nicht in Bytes. u'String'Präfix u wie.




#### **`len(String)Dann**Wortzahl**Wird zurückgegeben.`**
>>> len(u'Iroha')

3

for -Wenn Sie es mit in drehen, wird es Zeichen für Zeichen verarbeitet..



for c in u'abc': ... print c

a b c


for c in u'Iroha': ... print c

ich Ro Ist



#### **`str.decode()Kann mit von str nach Unicode konvertieren.`**
>>> 'Iroha'.decode('utf-8')

u'\u3044\u308d\u306f'

Unicode verfügt über eine einheitliche Codierung, und Entwickler müssen bei der Verwendung von Unicode nicht auf die Codierung achten..



u'Irohani' + u'Hoheto'

u'\u3044\u308d\u306f\u306b\u307b\u3078\u3068'


 Bei der Ausgabe außerhalb des Skripts wird es jedoch immer in "str" konvertiert.

print u'Iroha'.encode('utf-8')

Iroha



#### **`Wenn Sie Unicode nicht in str konvertieren, wird es von der Laufzeit von Python automatisch konvertiert. Die für die Konvertierung verwendete Codierung hängt jedoch von der Ausführungsumgebung ab..`**

Ein häufiger Fall ist, wenn Sie versuchen, ein japanisch gemischtes `str``` mit coding: ascii zu konvertieren und eine `` UnicodeEncodeError Ausnahme erhalten ...

>>> 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)

Ob es ohne Konvertierung funktioniert, hängt von der Ausführungsumgebung ab. Wenn Sie es aus dem Skript löschen, sollten Sie sich dessen bewusst sein und es in `Unicode```->` str``` konvertieren.

Ordnungsgemäße Verwendung von Unicode und str

Ich denke, innerhalb des Skripts ist es am besten, es mit "Unicode" zu vereinheitlichen.

sys.Aus der Bibliothek erhaltenes Str, wie z. B. args, wird sofort in Unicode konvertiert.


 Im Gegenteil, wenn eine Zeichenfolge außerhalb des Skripts gedruckt wird (Beispiel: `` `print```), wird sie unmittelbar vor dem Drucken in` `` Unicode``-> `` str``` konvertiert.


#### **`Wenn Sie eine Mischung aus str und Unicode verwenden, versucht die Python-Laufzeit, str in Unicode zu konvertieren.`**

Zu diesem Zeitpunkt tritt `` `UnicodeDecodeError``` auf und es ist oft ärgerlich.

>>> '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)

Wenn Sie die Kodierung von str ...

Wenn Sie die Codierung von `` `str``` nicht kennen, die von außerhalb des Skripts erhalten wurde Ich konvertiere mit dem folgenden Code in "Unicode".

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

str und unicode
str und repr
Python2 str / unicode und codieren / decodieren
EP 3 Kennen Sie die Unterschiede zwischen Bytes, Str und Unicode
str (utf-8) oder Unicode ist wichtig
Experimentiert mit Unicode, Decodierung und Codierung
Pythons regulärer Ausdruck, str und unicode sind nüchtern
Über _ und __