python 2の符号化問題
2088 ワード
Python 2を使って中国語の関連コードを作る時、もしPython 2の中の符号化にあまり熟知していないならば、それでは十中八九あなたはこれに煩わされることができて、だから以下は符号化の問題をはっきりさせます
1960年代、米国は文字コードを制定し、英語の文字とバイナリビットの関係を統一的に規定した.これはASCIIコードと呼ばれ、現在まで使われています.
ASCIIコードは、スペース「SPACE」が32(バイナリ0010000000)、大文字のAが65(バイナリ01000001)の128文字の符号化を規定している.この128個の記号(印刷できない32個の制御記号を含む)は、1バイトの後ろ7ビットのみを占有し、一番前の1ビットは0に統一されている.
英語はASCIIコードだけで十分ですが、他の言語では無理でしょうから、いろいろな符号化方法があります.符号化の仕方が違うと、文字化けの問題が発生します.
では、このとき、すべての記号を組み込むと、文字化けの問題はなくなります.これがUnicodeです.
UTF-8はUnicodeの実装方式であり、現在比較的一般的な符号化方式である.なぜユニコードを直接使わないのか、スペースがもったいないからです.
コンピュータメモリでUnicode符号化を統一して使用し、保存または転送が必要な場合はUTF 8符号化に変換する.
符号化はUnicodeからUTF-8またはASCIIに変換され、復号はUTF-8またはASCIIからUnicodeに変換される.
符号化と復号化は,先乱符号を出さずに正常に読み書きできるようにするためである.
Python 2のデフォルトのファイル符号化フォーマットはASCIIコードであるため、ファイルの先頭にファイル符号化をUTF-8と宣言するのが一般的である.宣言ファイルを設定しない場合、python 2のデフォルトのASCIIコード符号化方式 に従う.符号化と実符号化が一致しないと宣言すると、実符号化に従って が読み出される.
次にPython 2にはstrとunicodeの2種類があります.
strからunicodeまでが復号、unicodeからstrまでが符号化、出力時にunicodesとして出力された場合に正常に表示されるのが一般的な形式です.
出力unicodeは文字化けしません.windowsの下のコンソールの符号化フォーマットはgbkなので、gbkフォーマットに符号化してもエラーはありませんが、UTF-8とコンソールgbkが一致しないので文字化けします.
ファイルの実際の符号化フォーマットと宣言符号化フォーマットはUTF-8を統一的に採用し、記憶に関する統一変換はunicodeに関連し、出力時にUTF-8またはgbkに変換すればよい.
--EOF--
名詞の解釈
ASCIIコード
1960年代、米国は文字コードを制定し、英語の文字とバイナリビットの関係を統一的に規定した.これはASCIIコードと呼ばれ、現在まで使われています.
ASCIIコードは、スペース「SPACE」が32(バイナリ0010000000)、大文字のAが65(バイナリ01000001)の128文字の符号化を規定している.この128個の記号(印刷できない32個の制御記号を含む)は、1バイトの後ろ7ビットのみを占有し、一番前の1ビットは0に統一されている.
Unicodeコード
英語はASCIIコードだけで十分ですが、他の言語では無理でしょうから、いろいろな符号化方法があります.符号化の仕方が違うと、文字化けの問題が発生します.
では、このとき、すべての記号を組み込むと、文字化けの問題はなくなります.これがUnicodeです.
UTF-8
UTF-8はUnicodeの実装方式であり、現在比較的一般的な符号化方式である.なぜユニコードを直接使わないのか、スペースがもったいないからです.
なぜ符号化と復号化を行うのか
コンピュータメモリでUnicode符号化を統一して使用し、保存または転送が必要な場合はUTF 8符号化に変換する.
符号化はUnicodeからUTF-8またはASCIIに変換され、復号はUTF-8またはASCIIからUnicodeに変換される.
符号化と復号化は,先乱符号を出さずに正常に読み書きできるようにするためである.
Python 2のコード
ファイルの宣言
Python 2のデフォルトのファイル符号化フォーマットはASCIIコードであるため、ファイルの先頭にファイル符号化をUTF-8と宣言するのが一般的である.
# -*- coding: utf-8 -*-
strとunicode
次にPython 2にはstrとunicodeの2種類があります.
str1 = ' '
print type(str) #str
str2 = u' '
print type(str2) #unicode
strからunicodeまでが復号、unicodeからstrまでが符号化、出力時にunicodesとして出力された場合に正常に表示されるのが一般的な形式です.
# -*- coding:utf-8 -*-
str1 = u" "
print str1 # unicode
str2 = str1.encode('utf-8') # UTF-8
print str2 #
str3 = str1.encode('gbk') # GBK
print str3 # gbk
出力unicodeは文字化けしません.windowsの下のコンソールの符号化フォーマットはgbkなので、gbkフォーマットに符号化してもエラーはありませんが、UTF-8とコンソールgbkが一致しないので文字化けします.
# -*- coding:utf-8 -*-
str1 = " "
print str1 # UTF-8
str2 = str1.decode('utf-8') # unicode
print str2 # unicode
str3 = str1.decode('utf-8').encode('gbk') # gbk
まとめ
ファイルの実際の符号化フォーマットと宣言符号化フォーマットはUTF-8を統一的に採用し、記憶に関する統一変換はunicodeに関連し、出力時にUTF-8またはgbkに変換すればよい.
--EOF--