Python文字エンコーディングの概要

Python文字エンコーディングの概要

1.注意:

python 2デフォルトのエンコーディングはASCII、であり、python 3デフォルトのエンコーディングはです。unicode

unicodeutf-32(4バイトを占める)、utf-16(2バイトを占める)、utf-8(1〜4バイトを占める)に分割されるためutf-16、最も一般的に使用されるunicodeバージョンですが、スペースを節約するutf-8ため、ファイルに保存されます。utf8

ではpython 3encodeコーディングは型にstringなりbytesますが、デコードはbytes型をstring型にデコードします

ではunicodeエンコーディング、1漢字= 2つのバイトは、1英文字= 1バイト、覚えている:ASCIIは中国語の文字を格納することはできません

utf-8これは可変長の文字エンコードであり、unicode最適化されており、すべての英語の文字は引き続きASCIIフォームに格納さ、すべての漢字は均一に3バイトです。

unicodeすべての国の文字コードが含まれており、異なる文字コード間の変換にunicodeはプロセスが必要です

pythonデフォルトのエンコーディング自体はutf-8

2.py2のエンコードおよびトランスコーディングプロセス

示されているように:

ここに画像の説明を挿入
注:これunicodeは中間エンコードであるため、文字エンコードの前の変換はすべてUnicodeにデコードしてから、変換が必要な文字エンコードにエンコードする必要があります。

2、文字エンコード変換

1.py2文字エンコードの変換

コードは次のように表示されます。

#! /usr/bin/env python
# -*- coding:utf-8 -*-
# __auther__ == luoahong
  
s = "我是学员"
#utf-8解码成unicode编码
s_to_unicode = s.decode("utf-8")
print("--------s_to_unicode-----")
print(s_to_unicode)
#然后unicode再编码成gbk
s_to_gbk = s_to_unicode.encode("gbk")
print("-----s_to_gbk------")
print(s_to_gbk)
#gbk解码成unicode再编码成utf-8
gbk_to_utf8 = s_to_gbk.decode("gbk").encode("utf-8")
print("------gbk_to_utf8-----")
print(gbk_to_utf8)

#出力

--------s_to_unicode-----
我是学员
-----s_to_gbk------
�����˧
------gbk_to_utf8-----
我是学员

注:上記の場合、適切な文字は非Unicodeエンコーディングです。サブスクライブしてください。ただし、文字エンコーディングがすでにUnicodeである場合はどうなりますか?

2.文字エンコードがすでにUnicodeである場合

コードは次のように表示されます。

#! /usr/bin/env python
# -*- coding:utf-8 -*-
# __auther__ == luoahong
  
#u代码字符编码是unicode
s = u'你好'
#已经是unicode,所以这边直接是编码成gbk
s_to_gbk = s.encode("gbk")
print("----s_to_gbk----")
print(s_to_gbk)
#这边再解码成unicode然后再编码成utf-8
gbk_to_utf8 = s_to_gbk.decode("gbk").encode("utf-8")
print("-----gbk_to_utf8---")
print(gbk_to_utf8)

#出力

----s_to_gbk----
���
-----gbk_to_utf8---
你好

注:漢字をpython2``中,在文件的开头指定字符编码,是要告诉解释器我现在的字符编码使用的是utf-8印刷するutf-8場合、漢字が含まていれば印刷できます。したがって、文字エンコードを指定しない場合、デフォルトでシステムエンコーディングが使用されます。システムエンコーディングがASCII、の場合、ASCII漢字を保存できないため、エラーが報告されます。

3.py3の文字エンコード変換

指示では、Python 3のエンコーディングが言及されており、デフォルトはユニコードであるため、文字エンコーディング間の変換はデコードプロセスを必要とせず、直接エンコードするだけです。コードは次のとおりです。

#! /usr/bin/env python
# __auther__ == luoahong
#无需声明字符编码,当然你声明也不会报错    
s = '你好'
# 字符串s已经是unicode编码,无需decode,直接encode s_to_gbk = s.encode("gbk") 
print("----s_to_gbk----") 
print(s_to_gbk)
#这边还是一样,gbk需要先解码成unicode,再编码成utf-8 gbk_to_utf8 = s_to_gbk.decode("gbk").encode("utf-8") print("-----gbk_to_utf8---") 
print(gbk_to_utf8)
#解码成unicode字符编码 
utf8_decode = gbk_to_utf8.decode("utf-8") 
print("-------utf8_decode----") 
print(utf8_decode)

#出力

----s_to_gbk----
b'\xc4\xe3\xba\xc3'
-----gbk_to_utf8---
b'\xe4\xbd\xa0\xe5\xa5\xbd'
-------utf8_decode----
你好

注:ではpython 3encodeコーディング中になりますstringとなりbytes、タイプdecode意志のデコード中bytesタイプはなっstringタイプあなたが簡単に見ることができるので、encodeそれがなった後にbytesデータの種類。また、特別な注意を払う必要python 3があります。ファイルの先頭で文字エンコードが宣言されているかどうかに関係なく、次のように、Pythonファイルが文字エンコードであり、ファイル内の文字列がユニコードであることを示すことしかできません。図:

3.要約:

1、uniocode

uniocodeすべての文字エンコード文字列を認識できます

2、python 2

文字エンコード間の変換は変換unicodeに通過する必要があるため、印刷時にそれを使用するunicodeか、対応する文字エンコード(ファイルの先頭でエンコードを指定)を使用して文字または文字列を印刷できます。 py2のバイトを区別するので、そのような結果になります。

3、python 3

Unicode文字認識するだけで、対応するエンコード形式に変換されるとbytes直接対応するエンコードタイプのバイトコード、つまりバイナリになります。認識される必要があり、認識されるためにはデコードする必要がありますUnicode

おすすめ

転載: blog.csdn.net/qq_25562325/article/details/111408324