Python学習ノート——Unicode
3325 ワード
内容は『Pythonコアプログラミング』より抜粋
Unicodeはコンピュータがこの星の多くの言語をサポートできる秘密兵器で、Unicodeの前に、ASCIIを使っていましたが、ASCIIですか.とても簡単で、英語の文字ごとに7桁のバイナリ数でコンピュータに格納されています.その範囲は32から126です.その実現原理はここでも言わない.
しかし、ASCIIコードは印刷可能な文字が95文字しか表示されず、その後ASCIIを8ビットに拡張して223文字を表示できるようになりました.これは欧米のアルファベット言語を表すのに十分ですが、中国語などの言語系では少なすぎます.そこでUnicodeコードが誕生しました.
Unicodeは1バイト以上で1文字を表すことでASCIIの制限を突破し、90000文字以上を表すことができます.
PythonとUnicode
UnicodeとASCIIコード値の文字列を可能な限り似ているように見せるために、Pythonの文字列は元の単純なデータ型から真のオブジェクトに変わり、ASCII文字列はStringTypeになり、Unicode文字列はUnicodeTypeタイプになり、彼らの行為は非常に近い.Stringモジュールには対応する処理関数があります.Stringモジュールは更新を停止し、ASCIIコードのサポートのみが保持されています.stringモジュールは使用を推奨していません.Unicodeと互換性のあるコードではモジュールを使用しないでください.Pythonはモジュールを後方互換性のために保持します.
Pythonのデフォルトの文字列はすべてASCIIで符号化され、文字列の前に「u」の接頭辞を付けることでUnicode文字列を宣言することができ、この「u」の接頭辞はPythonの後ろの文字列がUnicode文字列に編成されることを伝えます.
>>> "Hello World"#ASCII string
'Hello World'
>>> u"Hello World"#Unicode string
u'Hello World'
組み込まれたstr()関数とchr()関数はUnicodeを処理できません.通常のASCII符号化文字列しか処理できません.Unicode文字列がstr()関数にパラメータとして渡されると、まずASCII符号文字列に変換されstr()関数に渡されます.
Codecs
CodecはCoder/Decoderの頭文字の組み合わせで、テキストとバイナリの変換方式を定義しています.ASCIIのように1バイトで文字を数字に変換する方式とは異なり、Unicodeはマルチバイトを使用しています.これにより、Unicodeは多くの異なる符号化方式をサポートしています.例えば、codecがサポートする4つの耳でよく知っている符号化方式は、ASCII、ISO 8859-1/Latin-1、UTF-8です.およびUTF-16
最も有名なのはUTF-8符号化であり、ASCII文字を1バイトで符号化することであり、ASCII文字のUTF-8符号化とASCII符号化が完全に同じであるため、ASCII符号とUnicode符号テキストを同時に処理しなければならないプログラマーの作業が非常に容易になる.
UTF-8符号化は1~4バイトで他の言語の文字を表すことができ、Unicodeデータを直接処理する必要があるプログラマーに迷惑をかけています.固定長さで各文字を1つずつ読むことができません.幸いなことに、Unicodeデータを直接読む方法を身につける必要はありません.Pythonは私たちのために詳細を完成しました.マルチバイト文字の複雑な問題を処理することを心配する必要はありません.
UTF-16も変長符号化であるが、一般的ではない.
コーディングデコード
Unicodeは複数の符号化フォーマットをサポートしています.これはプログラマーに余分な負担をもたらします.ファイルに文字列を書き込むたびに、対応するUnicodeコンテンツを定義するための符号化を定義する必要があります.PythonはUnicode文字列のencode()関数を通じてこの問題を解決します.この関数は文字列の文字をパラメータとして受け入れます.指定した符号化フォーマットの内容を出力します.
したがって、Unicode文字列をディスクに書くたびに、指定されたエンコーダで「コード」を与え、それに応じて、このファイルからデータを読み出すときは、Unicode文字列オブジェクトにする必要があります.
簡単な例:
次のコードはUnicode文字列を作成し、UTF-8エンコーダで符号化し、ファイルに書き込み、ファイルからデータを読み返し、Unicode文字列オブジェクトに復号し、最後に、プログラムが正しく動作していることを確認するためにUnicode文字列を印刷します.
結果Hello worldが印刷されます
そして私たちはpyディレクトリの下にunicodeという名前がもう一つ見つかります.txtのファイルは、catコマンドで確認すると、印刷の結果と同じ内容になります.
Unicodeを実際に適用するには4つの点に注意してください.
1プログラムに文字列が現れる場合は必ず接頭辞uを付ける
2 str()関数ではなくUnicode()で代用
3古いstringモジュールは使用しないでください.非ASCIIコードに渡されると、すべてが台無しになります.
4必要がない場合は、プログラムにUnicode文字を符号化しないでください.encode()関数とdecode()関数は、ファイルまたはデータベースまたはネットワークに書き込む場合にのみ呼び出されます.
Unicodeはコンピュータがこの星の多くの言語をサポートできる秘密兵器で、Unicodeの前に、ASCIIを使っていましたが、ASCIIですか.とても簡単で、英語の文字ごとに7桁のバイナリ数でコンピュータに格納されています.その範囲は32から126です.その実現原理はここでも言わない.
しかし、ASCIIコードは印刷可能な文字が95文字しか表示されず、その後ASCIIを8ビットに拡張して223文字を表示できるようになりました.これは欧米のアルファベット言語を表すのに十分ですが、中国語などの言語系では少なすぎます.そこでUnicodeコードが誕生しました.
Unicodeは1バイト以上で1文字を表すことでASCIIの制限を突破し、90000文字以上を表すことができます.
PythonとUnicode
UnicodeとASCIIコード値の文字列を可能な限り似ているように見せるために、Pythonの文字列は元の単純なデータ型から真のオブジェクトに変わり、ASCII文字列はStringTypeになり、Unicode文字列はUnicodeTypeタイプになり、彼らの行為は非常に近い.Stringモジュールには対応する処理関数があります.Stringモジュールは更新を停止し、ASCIIコードのサポートのみが保持されています.stringモジュールは使用を推奨していません.Unicodeと互換性のあるコードではモジュールを使用しないでください.Pythonはモジュールを後方互換性のために保持します.
Pythonのデフォルトの文字列はすべてASCIIで符号化され、文字列の前に「u」の接頭辞を付けることでUnicode文字列を宣言することができ、この「u」の接頭辞はPythonの後ろの文字列がUnicode文字列に編成されることを伝えます.
>>> "Hello World"#ASCII string
'Hello World'
>>> u"Hello World"#Unicode string
u'Hello World'
組み込まれたstr()関数とchr()関数はUnicodeを処理できません.通常のASCII符号化文字列しか処理できません.Unicode文字列がstr()関数にパラメータとして渡されると、まずASCII符号文字列に変換されstr()関数に渡されます.
Codecs
CodecはCoder/Decoderの頭文字の組み合わせで、テキストとバイナリの変換方式を定義しています.ASCIIのように1バイトで文字を数字に変換する方式とは異なり、Unicodeはマルチバイトを使用しています.これにより、Unicodeは多くの異なる符号化方式をサポートしています.例えば、codecがサポートする4つの耳でよく知っている符号化方式は、ASCII、ISO 8859-1/Latin-1、UTF-8です.およびUTF-16
最も有名なのはUTF-8符号化であり、ASCII文字を1バイトで符号化することであり、ASCII文字のUTF-8符号化とASCII符号化が完全に同じであるため、ASCII符号とUnicode符号テキストを同時に処理しなければならないプログラマーの作業が非常に容易になる.
UTF-8符号化は1~4バイトで他の言語の文字を表すことができ、Unicodeデータを直接処理する必要があるプログラマーに迷惑をかけています.固定長さで各文字を1つずつ読むことができません.幸いなことに、Unicodeデータを直接読む方法を身につける必要はありません.Pythonは私たちのために詳細を完成しました.マルチバイト文字の複雑な問題を処理することを心配する必要はありません.
UTF-16も変長符号化であるが、一般的ではない.
コーディングデコード
Unicodeは複数の符号化フォーマットをサポートしています.これはプログラマーに余分な負担をもたらします.ファイルに文字列を書き込むたびに、対応するUnicodeコンテンツを定義するための符号化を定義する必要があります.PythonはUnicode文字列のencode()関数を通じてこの問題を解決します.この関数は文字列の文字をパラメータとして受け入れます.指定した符号化フォーマットの内容を出力します.
したがって、Unicode文字列をディスクに書くたびに、指定されたエンコーダで「コード」を与え、それに応じて、このファイルからデータを読み出すときは、Unicode文字列オブジェクトにする必要があります.
簡単な例:
次のコードはUnicode文字列を作成し、UTF-8エンコーダで符号化し、ファイルに書き込み、ファイルからデータを読み返し、Unicode文字列オブジェクトに復号し、最後に、プログラムが正しく動作していることを確認するためにUnicode文字列を印刷します.
# /home/xiaopeng/python/code/uniFile.py
'''
An example of reading and writing Unicode strings:Writes
a Unicode string to a file in utf-8 and reads it back in
'''
CODEC = 'utf-8' #
FILE = 'unicode.txt' #
hello_out = u"Hello world
" # Unicode
bytes_out = hello_out.encode(CODEC) # UTF-8
f = open(FILE,'w')
f.write(bytes_out) #
f.close()
f = open(FILE,'r')
bytes_in = f.read() #
f.close()
hello_in = bytes_in.decode(CODEC) #
print hello_in #
結果Hello worldが印刷されます
そして私たちはpyディレクトリの下にunicodeという名前がもう一つ見つかります.txtのファイルは、catコマンドで確認すると、印刷の結果と同じ内容になります.
Unicodeを実際に適用するには4つの点に注意してください.
1プログラムに文字列が現れる場合は必ず接頭辞uを付ける
2 str()関数ではなくUnicode()で代用
3古いstringモジュールは使用しないでください.非ASCIIコードに渡されると、すべてが台無しになります.
4必要がない場合は、プログラムにUnicode文字を符号化しないでください.encode()関数とdecode()関数は、ファイルまたはデータベースまたはネットワークに書き込む場合にのみ呼び出されます.