ホームページ >バックエンド開発 >Python チュートリアル >文字エンコーディングの難しい問題に対する Python3 の解決策の詳細な説明
Python3 の最も重要な改善点の 1 つは、Python2 の strings と文字エンコーディングによって残された大きな穴を解決することです。 Python コーディングはなぜそれほど苦痛なのでしょうか? Python2 の文字列設計にいくつかの欠陥が導入されました:
- デフォルトのエンコード方法として ASCII コードを使用することは、中国語の処理には非常に不向きです。
- 文字列を Unicode と str の 2 つのタイプに分類するという突飛な分類は、開発者に誤解を与えます
もちろん、これはバグではありません。処理時に注意を払う限り、これらの落とし穴は回避できます。しかし、Python3 では両方の問題が非常にうまく解決されます。
まず第一に、Python3 はシステムのデフォルトのエンコーディングを UTF-8 に設定します
>>> import sys >>> sys.getdefaultencoding() 'utf-8' >>>
その後、テキスト文字とバイナリデータがより明確に区別され、それぞれ str と bytes で表されます。すべてのテキスト文字は str 型で表されます。str は Unicode 文字セット のすべての文字を表すことができますが、バイナリ バイト データは bytes で表される新しい データ型 で表されます。
str>>> a = "a" >>> a 'a' >>> type(a) <class 'str'> >>> b = "禅" >>> b '禅' >>> type(b) <class 'str'>bytes Python3 では、文字引用符の前に 'b' を追加すると、これがバイト型の
>>> c = b'a'>>> c b'a'>>> type(c) <class 'bytes'> >>> d = b'\xe7\xa6\x85'>>> d b'\xe7\xa6\x85'>>> type(d) <class 'bytes'> >>> >>> e = b'禅' File "<stdin>", line 1SyntaxError: bytes can only contain ASCII literal characters.bytes 型は str と同じ操作を提供し、シャーディング、インデックス付け、基本的な数値操作などの操作をサポートします。ただし、 + 演算は、py2 では実行可能ですが、str 型および bytes 型のデータに対しては実行できません。
>>> b"a"+b"c" b'ac' >>> b"a"*2 b'aa' >>> b"abcdef\xd6"[1:] b'bcdef\xd6' >>> b"abcdef\xd6"[-1] 214 >>> b"a" + "b" Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can't concat bytes to strエンコードとデコード str と bytes の間の変換は、encode メソッドと decode メソッドを使用して実行できます。
encode は文字からバイトへのエンコード変換を担当します。デフォルトでは、UTF-8 エンコードが使用されます。
>>> s = "Python之禅" >>> s.encode() b'Python\xe4\xb9\x8b\xe7\xa6\x85' >>> s.encode("gbk") b'Python\xd6\xae\xec\xf8'decode は、バイトをデコードして文字に変換する役割を果たし、通常、変換には UTF-8 エンコード形式を使用します。
りー
以上が文字エンコーディングの難しい問題に対する Python3 の解決策の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。