2

Dive into Pythonから:

Python 3 では、すべての文字列は Unicode 文字のシーケンスです。UTF-8 でエンコードされた Python 文字列や、CP-1252 としてエンコードされた Python 文字列などはありません。「この文字列はUTF-8ですか?」は無効な質問です。UTF-8 は、文字を一連のバイトとしてエンコードする方法です。文字列を特定の文字エンコーディングのバイト シーケンスに変換したい場合は、Python 3 が役に立ちます。一連のバイトを取得してそれを文字列に変換したい場合、Python 3 はそれにも役立ちます。バイトは文字ではありません。バイトはバイトです。文字は抽象化です。文字列は、これらの抽象化のシーケンスです。

作者の言ってる意味がわからない。

私が言うときs = 'hello'、どのようにs内部的にエンコードされますか? もちろん、いくつかのエンコーディングを使用する必要があります。彼は、すべての文字列は Unicode 文字のシーケンスであると言います。しかし、各文字は何バイトですか? この文字列は UTF-8 ですか? なぜ彼は言うのですか:「UTF-8でエンコードされたPython文字列などはありません」.

Python には、Python の「文字列」を、そのエンコーディングを使用する別のソフトウェアで読み取ることができる一連のバイトに変換する機能があることを理解しています。また、一連のバイトを Python の「文字列」に変換することもサポートしています。この「文字列」の内部表現は、私を混乱させるものです。

4

3 に答える 3

4

著者は、Python 2 と 3 の文字列を比較します。Python 2 では、文字列はバイト配列として表現されていたため、非 ASCII 文字を処理する際に多くの問題が発生しました。プログラマーは、アプリケーション内の文字列の現在のエンコーディングを常に追跡する必要がありました (例: HTML ページのテキストのエンコーディング)。Unicode オブジェクトの導入により、Python 2.x でこれを解決する試みがありました。

s  = 'text'    # string/byte array object 
un = u'text'   # unicode object

しかし、多くのアプリケーションは依然として通常の古いスタイルの文字列を使用していました。

そのため、Python 3 では、文字列 (すべて Unicode にする) とバイト配列を分離することが決定されました。したがって、Python 3 では次のようになります。

s = 'text'                             # string/unicode object
b = bytes([0xA2,0x01,0x02,0x03,0x04])  # byte array object
于 2013-09-20T09:59:46.973 に答える
0

Python は、Unicode 文字列に UCS-2 または UCS-4 エンコーディングを内部的に使用します (少なくとも Python 2.x では)。

于 2013-09-20T09:44:42.427 に答える