python 2の符号化問題

2088 ワード

Python 2を使って中国語の関連コードを作る時、もしPython 2の中の符号化にあまり熟知していないならば、それでは十中八九あなたはこれに煩わされることができて、だから以下は符号化の問題をはっきりさせます

名詞の解釈


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 -*-
  • 宣言ファイルを設定しない場合、python 2のデフォルトのASCIIコード符号化方式
  • に従う.
  • 符号化と実符号化が一致しないと宣言すると、実符号化に従って
  • が読み出される.

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