この記事では、 Python 文字列プログラミングを紹介します。 String は データ型でもあるとすでに述べましたが、文字列の特別な点 エンコードに問題があるということです。
コンピュータは数値のみを処理できるため、テキストを処理する場合は、処理する前にまずテキストを数値に変換する必要があります。最も初期のコンピュータは、1 バイトとして 8 ビットを使用して設計されました。したがって、1 バイトで表現できる最大の整数は 255 (2 進数の 11111111 = 10 進数の 255) です。より大きな整数を表現したい場合は、より多くのバイトを使用する必要があります。たとえば、2 バイトで表現できる最大整数は 65535、4 バイトで表現できる最大整数は 4294967295 です。
コンピューターはアメリカ人によって発明されて以来、最初にコンピューターにエンコードされたのは、英語の大文字と小文字、数字、および一部の記号の 127 文字だけでした。このエンコード テーブルは ASCII エンコードと呼ばれます。文字 文字 A のコードは 65、小文字 z のコードは 122 です。
しかし、中国語を処理するには、1 バイトでは明らかに不十分です。少なくとも 2 バイトが必要であり、ASCII エンコードと競合することはできません。そのため、中国は中国語をエンコードする GB2312 エンコードを策定しました。
想像できるのは、世界には何百もの言語があるということです。日本では日本語を Shift_JIS にまとめ、韓国では韓国語を Euc-kr にまとめています。各国には独自の規格があり、競合の結果、多言語混合テキストでは表示時に文字化けが発生します。
そこでUnicodeが誕生しました。 Unicode はすべての言語を一連のエンコーディングに統合するため、コードの文字化けの問題はなくなります。
Unicode 標準も常に進化していますが、最も一般的に使用されているのは 2 バイトを使用して文字を表すことです (非常に離れた文字を使用したい場合は 4 バイトが必要です)。最新のオペレーティング システムとほとんどのプログラミング言語は Unicode を直接サポートしています。
ここで、ASCII エンコードと Unicode エンコードの違いを見てみましょう。ASCII エンコードは 1 バイトですが、Unicode エンコードは通常 2 バイトです。
ASCII でエンコードされた文字 A は 10 進数 65、バイナリ 01000001;
ASCII でエンコードされた文字 0 は 10 進数 48、バイナリ 00110000 です。文字「0」は整数とは異なることに注意してください。 0 ;
中国語の文字が ASCII エンコードの範囲を超えています。Unicode エンコードは 10 進数で 20013、2 進数で 01001110 00101101 です。
ASCII エンコードに Unicode エンコードを使用する場合は、先頭に 0 を追加するだけで済むため、A の Unicode エンコードは 00000000 01000001 となります。
新たな問題が発生しました。Unicode エンコーディングに統一されれば、文字化けの問題は解消されます。ただし、作成するテキストが基本的にすべて英語の場合、Unicode エンコードは ASCII エンコードの 2 倍のストレージ容量を必要とし、ストレージと送信の点で非常に不経済です。
そこで、保護の精神から、Unicode エンコードを「可変長エンコード」に変換する UTF-8 エンコードが登場しました。 UTF-8 エンコーディングは、Unicode 文字をさまざまな数値サイズに従って 1 ~ 6 バイトにエンコードします。一般的に使用される英語の文字は 1 バイトにエンコードされ、中国語の文字は通常 3 バイトにエンコードされます。非常にまれな文字のみがエンコードされます。4 ~ 6 にエンコードされます。バイト。送信したいテキストに多数の英語の文字が含まれている場合は、UTF-8 エンコードを使用するとスペースを節約できます。
したがって、多くの Web のソース コードがページには のような情報が含まれ、Web ページが UTF-8 エンコーディングを使用していることを示します。
以上がPython プログラミングにおける文字列エンコードの問題についての簡単な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。