Python符号化と文字列
2006 ワード
文字コード
文字列もデータ型ですが、文字列が特殊なのは符号化の問題です.コンピュータは数字しか処理できないので、テキストを処理するには、まずテキストを数字に変換してから処理しなければなりません.最初はASCIIコードがあったとか、中国のGB****とか、各国のコードがいろいろあって、いろいろな言語が同時に存在するときに文字化けの問題があったことを知っています.そしてUnicodeが現れ、Unicodeはすべての言語を1つのコードに統一し、文字化けの問題はなくなりました.Unicode規格も発展していますが、最も一般的なのは2バイトで1文字を表すことです(非常に辺鄙な文字を使うには4バイトが必要です).現代のオペレーティングシステムとほとんどのプログラミング言語はUnicodeを直接サポートしています.Unicodeコードに統一されると、文字化けの問題はなくなります.しかし、あなたが書いたテキストが基本的にすべて英語であれば、Unicode符号化でASCII符号化よりも倍以上の記憶空間が必要で、記憶と伝送では非常にお得ではありません.節約の精神に基づいて、Unicode符号化を「可変長符号化」に変換するUTF-8符号化も登場した.UTF-8符号化は1つのUnicode文字を異なる数字の大きさによって1-6バイトに符号化し、よく使われる英語のアルファベットは1バイトに符号化され、漢字は通常3バイトで、辺鄙な文字だけが4-6バイトに符号化される.コンピュータメモリではUnicode符号化を統一し、ハードディスクに保存する必要がある場合や転送する必要がある場合はUTF-8符号化に変換する.メモ帳で編集する場合、ファイルから読み取ったUTF-8文字がUnicode文字に変換されてメモリに格納され、編集が完了した後、保存するときにUnicodeがUTF-8に変換されてファイルに保存されます.Webページを閲覧すると、サーバは動的に生成したUnicodeコンテンツをUTF-8に変換してブラウザに転送します.そのため、多くのページのソースコードには
さらに最新のPython 3バージョンでは、文字列はUnicodeで符号化されています.つまり、Pythonの文字列は多言語をサポートしています.個々の文字の符号化に対して、Pythonはord()関数を提供して文字の整数表現を取得し、chr()関数は符号化を対応する文字に変換する.Pythonの文字列タイプはstrであるため、メモリにはUnicodeで表され、1文字は数バイトに対応する.ネットワーク上で転送したり、ディスクに保存したりするには、strをバイト単位のbytesに変更する必要があります.
最初の行の注釈はLinux/OS Xシステムに伝えるためで、これはPython実行可能なプログラムで、Windowsシステムはこの注釈を無視します;2行目の注釈はPython解釈器に、UTF-8コードに従ってソースコードを読み取るように伝えるためです.そうしないと、ソースコードに書いた中国語の出力が文字化けしてしまう可能性があります.
文字列もデータ型ですが、文字列が特殊なのは符号化の問題です.コンピュータは数字しか処理できないので、テキストを処理するには、まずテキストを数字に変換してから処理しなければなりません.最初はASCIIコードがあったとか、中国のGB****とか、各国のコードがいろいろあって、いろいろな言語が同時に存在するときに文字化けの問題があったことを知っています.そしてUnicodeが現れ、Unicodeはすべての言語を1つのコードに統一し、文字化けの問題はなくなりました.Unicode規格も発展していますが、最も一般的なのは2バイトで1文字を表すことです(非常に辺鄙な文字を使うには4バイトが必要です).現代のオペレーティングシステムとほとんどのプログラミング言語はUnicodeを直接サポートしています.Unicodeコードに統一されると、文字化けの問題はなくなります.しかし、あなたが書いたテキストが基本的にすべて英語であれば、Unicode符号化でASCII符号化よりも倍以上の記憶空間が必要で、記憶と伝送では非常にお得ではありません.節約の精神に基づいて、Unicode符号化を「可変長符号化」に変換するUTF-8符号化も登場した.UTF-8符号化は1つのUnicode文字を異なる数字の大きさによって1-6バイトに符号化し、よく使われる英語のアルファベットは1バイトに符号化され、漢字は通常3バイトで、辺鄙な文字だけが4-6バイトに符号化される.コンピュータメモリではUnicode符号化を統一し、ハードディスクに保存する必要がある場合や転送する必要がある場合はUTF-8符号化に変換する.メモ帳で編集する場合、ファイルから読み取ったUTF-8文字がUnicode文字に変換されてメモリに格納され、編集が完了した後、保存するときにUnicodeがUTF-8に変換されてファイルに保存されます.Webページを閲覧すると、サーバは動的に生成したUnicodeコンテンツをUTF-8に変換してブラウザに転送します.そのため、多くのページのソースコードには
のような情報があり、そのページがUTF-8で符号化されていることを示しています.Pythonの文字列
さらに最新のPython 3バージョンでは、文字列はUnicodeで符号化されています.つまり、Pythonの文字列は多言語をサポートしています.個々の文字の符号化に対して、Pythonはord()関数を提供して文字の整数表現を取得し、chr()関数は符号化を対応する文字に変換する.Pythonの文字列タイプはstrであるため、メモリにはUnicodeで表され、1文字は数バイトに対応する.ネットワーク上で転送したり、ディスクに保存したりするには、strをバイト単位のbytesに変更する必要があります.
a = b'ABCD'
は'ABC'
とb'ABC'
が表示する内容は同じですが、前者はstrで、後者はbytesの各文字が1バイトしか占めていません.Pythonソースコードもテキストファイルであるため、ソースコードに英語が含まれている場合にソースコードを保存する場合は、必ずUTF-8符号化として保存するよう指定する必要があります.Pythonインタプリタがソースコードを読み込むとき、UTF-8コードで読み取るために、通常、ファイルの先頭にこの2行を書きます.#!/usr/bin/env python3
# -*- coding: utf-8 -*-
最初の行の注釈はLinux/OS Xシステムに伝えるためで、これはPython実行可能なプログラムで、Windowsシステムはこの注釈を無視します;2行目の注釈はPython解釈器に、UTF-8コードに従ってソースコードを読み取るように伝えるためです.そうしないと、ソースコードに書いた中国語の出力が文字化けしてしまう可能性があります.
書式設定
>>>'Hello,%s' % 'world'
'Hello,world'
%は文字列をフォーマットするために使用され、文字列内部では%sは文字列置換を表し、%dは整数置換を表し、%fは浮動小数点数を表し、%xは16進数を表し、何を使用すべきかよく分からない場合、%sは永遠に有効である.