Python学習ノート(3)文字コード

3193 ワード

1.常用コード


・ASCII:1バイト(漢字なし)、・Unicode:各国言語を含む、通常は2バイト、特に辺鄙な文字を使う場合は4バイト・UTF-8:Unicodeの変種、可変長符号化、1つのUnicode文字を大きさによって1-6バイト、常用英字1バイト、漢字通常3バイト、辺鄙文字4-6バイトに符号化
  :   UTF-8 

2.Python文字列


Python 3では、文字列はUnicode符号化、すなわち多言語をサポートする.ord()関数は文字の整数表現を取得し、chr()関数は符号化を対応する文字に変換する.
>>> ord('P')
80
>>> chr(81)
'Q'    

文字の整数符号化を知っている場合は、次のように書くことができます.
>>> '\u4e2d\u6587'
' '

Pythonでは、文字列タイプはstrであり、メモリにはUnicode符号化で存在し、その1文字はいくつかのバイトに対応する.ネットワーク上で転送したり、ディスクに保存したりするには、strをバイト単位のbytesに変更する必要があります.Pythonはbytesタイプのデータに対してb接頭辞付きの一重引用符または二重引用符で表す.
x = b'ABC'

'ABC'とb'ABC'の違い:前者はstr、後者はbytesで、表示内容は同じですが、bytesの各文字は1バイトしか占めません.Unicodeで表されるstrは、encode()メソッドによって、指定されたbytesとして符号化することができる.
>>> 'Python'.encode('ascii')
b'Python'
>>> ' '.encode('utf-8')
b'\xe4\xb8\xad\xe5\x9b\xbd'
>>> 'Python'.encode('utf-8')
b'Python'
>>> ' '.encode('ascii')
Traceback (most recent call last):
File "", line 1, in 
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1:      ordinal not in range(128)

中国語を含むstrは、中国語の符号化範囲がASCIIの符号化範囲を超えているため、ASCIIで符号化できないことがわかる.逆に、ネットワークまたはディスクからバイトストリームを読み出すとbytesが読み出され、strに変換するにはdecode()メソッドを使用します.
>>> b'Python'.decode('utf-8')
'Python'
>>> b'\xe4\xb8\xad\xe5\x9b\xbd'.decode('utf-8')
' '

bytesに復号できないバイトが含まれている場合、エラーが発生します.
>>> b'\xe4\xb8\xad\xe5'.decode('utf-8')
Traceback (most recent call last):
File "", line 1, in 
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe5 in position 3:     unexpected end of data

bytesに無効なバイトが一部しかない場合は、errors='ignore'に入力してエラーバイトを無視できます.
>>> b'\xe4\xb8\xad\xe5'.decode('utf-8', errors='ignore')
' '

len()の使用:strで文字数を計算し、bytesでバイト数を計算します.
>>> len('Python')
6
>>> len(' ')
2
>>> len('Python'.encode('utf-8'))
6
>>> len(' '.encode('utf-8'))
6

変換後、1つの中国語文字は一般的に3バイト、1つの英語文字は1バイトしか占めていないことがわかります.strとbytesの変換を行う場合は、UTF-8符号化方式を常に使用しなければならない.特殊な場合、次のような特殊なコードを使用する必要がある場合があります.
>>> ' '.encode('gb2312')
b'\xd6\xd0\xb9\xfa'

GB 2312符号化:GB 2312は国が制定した漢字符号化基準であり、双子節を用いて符号化される.6763個の常用漢字と682個の非漢字文字からなり、1つの漢字は2バイトである.一部の辺鄙な字や古文については,拡張されたGBK符号化を用いる.
Pythonのソースコードを書いています.pyファイルの場合、通常は先頭に書きます.
#!usr/bin/env python3
# -*- coding: utf-8 -*-

1行目:Linux/OSXシステムについて、ヒントシステムこれはPython実行可能プログラムで、Windowsシステムについて、この注釈を無視します2行目:Python解釈器に教えて、UTF-8コードに従ってソースコードを読み取って、さもなくばソースコードの中の中国語は文字化けして現れるかもしれません