Unicodeオブジェクトとコーデック—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/2.7/c-api/unicode
移動先:案内検索

Unicodeオブジェクトとコーデック

Unicodeオブジェクト

Unicodeタイプ

これらは、PythonでのUnicode実装に使用される基本的なUnicodeオブジェクトタイプです。

type Py_UNICODE
このタイプは、Unicode序数を保持するための基礎としてPythonによって内部的に使用されるストレージタイプを表します。 Pythonのデフォルトのビルドは、 Py_UNICODE に16ビット型を使用し、Unicode値をUCS2として内部に格納します。 PythonのUCS4バージョンをビルドすることも可能です(最新のLinuxディストリビューションにはPythonのUCS4ビルドが付属しています)。 これらのビルドは、 Py_UNICODE に32ビット型を使用し、UnicodeデータをUCS4として内部に格納します。 wchar_tが利用可能で、選択したPython Unicodeビルドバリアントと互換性があるプラットフォームでは、 Py_UNICODEwchar_tのtypedefエイリアスであり、ネイティブプラットフォームの互換性を強化します。 他のすべてのプラットフォームでは、 Py_UNICODE は、unsigned short(UCS2)またはunsigned long(UCS4)のいずれかのtypedefエイリアスです。

UCS2およびUCS4Pythonビルドはバイナリ互換ではないことに注意してください。 拡張機能やインターフェースを作成するときは、このことに注意してください。

type PyUnicodeObject
PyObject のこのサブタイプは、PythonUnicodeオブジェクトを表します。
PyTypeObject PyUnicode_Type
PyTypeObject のこのインスタンスは、PythonUnicode型を表します。 unicodeおよびtypes.UnicodeTypeとしてPythonコードに公開されます。

次のAPIは実際にはCマクロであり、高速チェックを実行したり、Unicodeオブジェクトの内部読み取り専用データにアクセスしたりするために使用できます。

int PyUnicode_Check(PyObject *o)

オブジェクト o がUnicodeオブジェクトまたはUnicodeサブタイプのインスタンスである場合、trueを返します。

バージョン2.2で変更:サブタイプの受け入れを許可しました。

int PyUnicode_CheckExact(PyObject *o)

オブジェクト o がUnicodeオブジェクトであるが、サブタイプのインスタンスではない場合はtrueを返します。

バージョン2.2の新機能。

Py_ssize_t PyUnicode_GET_SIZE(PyObject *o)

オブジェクトのサイズを返します。 oPyUnicodeObject である必要があります(チェックされていません)。

バージョン2.5で変更:この関数はintタイプを返しました。 これには、64ビットシステムを適切にサポートするためにコードの変更が必要になる場合があります。

Py_ssize_t PyUnicode_GET_DATA_SIZE(PyObject *o)

オブジェクトの内部バッファのサイズをバイト単位で返します。 oPyUnicodeObject である必要があります(チェックされていません)。

バージョン2.5で変更:この関数はintタイプを返しました。 これには、64ビットシステムを適切にサポートするためにコードの変更が必要になる場合があります。

Py_UNICODE *PyUnicode_AS_UNICODE(PyObject *o)
オブジェクトの内部 Py_UNICODE バッファへのポインタを返します。 oPyUnicodeObject である必要があります(チェックされていません)。
const char *PyUnicode_AS_DATA(PyObject *o)
オブジェクトの内部バッファへのポインタを返します。 oPyUnicodeObject である必要があります(チェックされていません)。
int PyUnicode_ClearFreeList()

フリーリストをクリアします。 解放されたアイテムの総数を返します。

バージョン2.6の新機能。


Unicode文字プロパティ

Unicodeは、さまざまな文字プロパティを提供します。 最も頻繁に必要とされるものは、Python構成に応じてC関数にマップされるこれらのマクロを介して利用できます。

int Py_UNICODE_ISSPACE(Py_UNICODE ch)
ch が空白文字であるかどうかに応じて、1または0を返します。
int Py_UNICODE_ISLOWER(Py_UNICODE ch)
ch が小文字であるかどうかに応じて、1または0を返します。
int Py_UNICODE_ISUPPER(Py_UNICODE ch)
ch が大文字であるかどうかに応じて、1または0を返します。
int Py_UNICODE_ISTITLE(Py_UNICODE ch)
ch がタイトルケース文字であるかどうかに応じて、1または0を返します。
int Py_UNICODE_ISLINEBREAK(Py_UNICODE ch)
ch が改行文字であるかどうかに応じて、1または0を返します。
int Py_UNICODE_ISDECIMAL(Py_UNICODE ch)
ch が10進文字であるかどうかに応じて、1または0を返します。
int Py_UNICODE_ISDIGIT(Py_UNICODE ch)
ch が数字であるかどうかに応じて、1または0を返します。
int Py_UNICODE_ISNUMERIC(Py_UNICODE ch)
ch が数字であるかどうかに応じて、1または0を返します。
int Py_UNICODE_ISALPHA(Py_UNICODE ch)
ch が英字であるかどうかに応じて、1または0を返します。
int Py_UNICODE_ISALNUM(Py_UNICODE ch)
ch が英数字であるかどうかに応じて、1または0を返します。

これらのAPIは、高速の直接文字変換に使用できます。

Py_UNICODE Py_UNICODE_TOLOWER(Py_UNICODE ch)
小文字に変換された文字 ch を返します。
Py_UNICODE Py_UNICODE_TOUPPER(Py_UNICODE ch)
大文字に変換された文字 ch を返します。
Py_UNICODE Py_UNICODE_TOTITLE(Py_UNICODE ch)
タイトルケースに変換された文字 ch を返します。
int Py_UNICODE_TODECIMAL(Py_UNICODE ch)
10進正の整数に変換された文字 ch を返します。 これが不可能な場合は、-1を返します。 このマクロは例外を発生させません。
int Py_UNICODE_TODIGIT(Py_UNICODE ch)
1桁の整数に変換された文字 ch を返します。 これが不可能な場合は、-1を返します。 このマクロは例外を発生させません。
double Py_UNICODE_TONUMERIC(Py_UNICODE ch)
ダブルに変換された文字 ch を返します。 これが不可能な場合は、-1.0を返します。 このマクロは例外を発生させません。


プレーンPy_UNICODE

Unicodeオブジェクトを作成し、それらの基本的なシーケンスプロパティにアクセスするには、次のAPIを使用します。

PyObject *PyUnicode_FromUnicode(const Py_UNICODE *u, Py_ssize_t size)

指定されたサイズのPy_UNICODEバッファ u からUnicodeオブジェクトを作成します。 uNULL である可能性があり、これにより内容が未定義になります。 必要なデータを入力するのはユーザーの責任です。 バッファが新しいオブジェクトにコピーされます。 バッファが NULL でない場合、戻り値は共有オブジェクトである可能性があります。 したがって、結果のUnicodeオブジェクトの変更は、 uNULL の場合にのみ許可されます。

バージョン2.5で変更:この関数は、サイズintタイプを使用していました。 これには、64ビットシステムを適切にサポートするためにコードの変更が必要になる場合があります。

PyObject *PyUnicode_FromStringAndSize(const char *u, Py_ssize_t size)

charバッファ u からUnicodeオブジェクトを作成します。 バイトはUTF-8でエンコードされていると解釈されます。 uNULL の場合もあり、内容が未定義になります。 必要なデータを入力するのはユーザーの責任です。 バッファが新しいオブジェクトにコピーされます。 バッファが NULL でない場合、戻り値は共有オブジェクトである可能性があります。 したがって、結果のUnicodeオブジェクトの変更は、 uNULL の場合にのみ許可されます。

バージョン2.6の新機能。

PyObject *PyUnicode_FromString(const char *u)

UTF-8でエンコードされたnullで終了するcharバッファ u からUnicodeオブジェクトを作成します。

バージョン2.6の新機能。

PyObject *PyUnicode_FromFormat(const char *format, ...)

C printf()スタイルの format 文字列と可変数の引数を取り、結果のPythonユニコード文字列のサイズを計算し、値がフォーマットされた文字列を返します。 可変引数はCタイプである必要があり、 format 文字列のフォーマット文字に正確に対応している必要があります。 次のフォーマット文字を使用できます。

文字のフォーマット

タイプ

コメント

%%

該当なし

The literal % character.

%c

int

Cintとして表される単一の文字。

%d

int

printf("%d")とまったく同じです。

%u

unsigned int

printf("%u")とまったく同じです。

%ld

長いです

printf("%ld")とまったく同じです。

%lu

unsigned long

printf("%lu")とまったく同じです。

%zd

Py_ssize_t

printf("%zd")とまったく同じです。

%zu

size_t

printf("%zu")とまったく同じです。

%i

int

printf("%i")とまったく同じです。

%x

int

printf("%x")とまったく同じです。

%s

char *

ヌル終了C文字配列。

%p

空所*

Cポインターの16進表現。 プラットフォームのprintfの出力に関係なく、リテラル0xで開始することが保証されていることを除いて、printf("%p")とほぼ同等です。

%U

PyObject *

ユニコードオブジェクト。

%V

PyObject *、char *

Unicodeオブジェクト( NULL の場合があります)および2番目のパラメーターとしてのnullで終了するC文字配列(最初のパラメーターが NULL の場合に使用されます)。

%S

PyObject *

PyObject_Unicode()を呼び出した結果。

%R

PyObject *

PyObject_Repr()を呼び出した結果。

認識されないフォーマット文字により、フォーマット文字列の残りのすべてがそのまま結果文字列にコピーされ、余分な引数は破棄されます。

バージョン2.6の新機能。

PyObject *PyUnicode_FromFormatV(const char *format, va_list vargs)

PyUnicode_FromFormat()と同じですが、2つの引数を取る点が異なります。

バージョン2.6の新機能。

Py_UNICODE *PyUnicode_AsUnicode(PyObject *unicode)
Unicodeオブジェクトの内部 Py_UNICODE バッファーへの読み取り専用ポインターを返します。 unicode がUnicodeオブジェクトでない場合は、 NULL を返します。 結果のPy_UNICODE*文字列には、埋め込まれたヌル文字が含まれている可能性があることに注意してください。これにより、ほとんどのC関数で使用されるときに文字列が切り捨てられます。
Py_ssize_t PyUnicode_GetSize(PyObject *unicode)

Unicodeオブジェクトの長さを返します。

バージョン2.5で変更:この関数はintタイプを返しました。 これには、64ビットシステムを適切にサポートするためにコードの変更が必要になる場合があります。

PyObject *PyUnicode_FromEncodedObject(PyObject *obj, const char *encoding, const char *errors)

エンコードされたオブジェクト obj をUnicodeオブジェクトに強制変換し、refcountがインクリメントされた参照を返します。

文字列およびその他のcharバッファ互換オブジェクトは、指定されたエンコーディングに従って、エラーによって定義されたエラー処理を使用してデコードされます。 両方を NULL にして、インターフェイスにデフォルト値を使用させることができます(詳細については次のセクションを参照してください)。

Unicodeオブジェクトを含む他のすべてのオブジェクトにより、TypeErrorが設定されます。

エラーが発生した場合、APIは NULL を返します。 呼び出し元は、返されたオブジェクトをdecrefする責任があります。

PyObject *PyUnicode_FromObject(PyObject *obj)
PyUnicode_FromEncodedObject(obj, NULL, "strict")のショートカット。これは、Unicodeへの強制が必要な場合にインタープリター全体で使用されます。

プラットフォームがwchar_tをサポートし、ヘッダーファイルwchar.hを提供する場合、Pythonは次の関数を使用してこのタイプに直接インターフェースできます。 Python独自の Py_UNICODE タイプがシステムのwchar_tと同一である場合、サポートは最適化されます。


wchar_tサポート

wchar_tそれをサポートするプラットフォームのサポート:

PyObject *PyUnicode_FromWideChar(const wchar_t *w, Py_ssize_t size)

指定されたサイズwchar_tバッファ w からUnicodeオブジェクトを作成します。 失敗した場合は NULL を返します。

バージョン2.5で変更:この関数は、サイズintタイプを使用していました。 これには、64ビットシステムを適切にサポートするためにコードの変更が必要になる場合があります。

Py_ssize_t PyUnicode_AsWideChar(PyUnicodeObject *unicode, wchar_t *w, Py_ssize_t size)

Unicodeオブジェクトの内容をwchar_tバッファ w にコピーします。 最大でサイズ wchar_t文字がコピーされます(末尾の0で終わる可能性のある文字を除く)。 コピーされたwchar_t文字数、またはエラーの場合は-1を返します。 結果のwchar_t文字列は、0で終了する場合と終了しない場合があることに注意してください。 アプリケーションで必要な場合に備えて、wchar_t文字列が0で終了していることを確認するのは呼び出し元の責任です。 また、wchar_t*文字列にヌル文字が含まれている可能性があることに注意してください。これにより、ほとんどのC関数で使用すると文字列が切り捨てられます。

バージョン2.5で変更:この関数はintタイプを返し、サイズintタイプを使用しました。 これには、64ビットシステムを適切にサポートするためにコードの変更が必要になる場合があります。


組み込みコーデック

Pythonは、速度を上げるためにCで記述された一連の組み込みコーデックを提供します。 これらのコーデックはすべて、次の関数を介して直接使用できます。

次のAPIの多くは、エンコードとエラーの2つの引数を取り、組み込みの unicode() Unicodeオブジェクトコンストラクターのものと同じセマンティクスを持っています。

エンコーディングを NULL に設定すると、デフォルトのエンコーディングであるASCIIが使用されます。 ファイルシステムコールでは、ファイル名のエンコーディングとしてPy_FileSystemDefaultEncodingを使用する必要があります。 この変数は読み取り専用として扱う必要があります。一部のシステムでは、静的文字列へのポインタになり、他のシステムでは、実行時に(アプリケーションがsetlocaleを呼び出すときなど)変更されます。

エラー処理はエラーによって設定されます。エラーは NULL に設定することもできます。これは、コーデックに定義されているデフォルトの処理を使用することを意味します。 すべての組み込みコーデックのデフォルトのエラー処理は「厳密」です(ValueErrorが発生します)。

コーデックはすべて同様のインターフェイスを使用します。 簡単にするために、以下の一般的なものからの逸脱のみが文書化されています。

汎用コーデック

これらは一般的なコーデックAPIです。

PyObject *PyUnicode_Decode(const char *s, Py_ssize_t size, const char *encoding, const char *errors)

エンコードされた文字列 sサイズバイトをデコードして、Unicodeオブジェクトを作成します。 encoding および errors は、 unicode()組み込み関数の同じ名前のパラメーターと同じ意味を持ちます。 使用するコーデックは、Pythonコーデックレジストリを使用して検索されます。 コーデックによって例外が発生した場合は、 NULL を返します。

バージョン2.5で変更:この関数は、サイズintタイプを使用していました。 これには、64ビットシステムを適切にサポートするためにコードの変更が必要になる場合があります。

PyObject *PyUnicode_Encode(const Py_UNICODE *s, Py_ssize_t size, const char *encoding, const char *errors)

指定されたサイズPy_UNICODE バッファー s をエンコードし、Python文字列オブジェクトを返します。 encoding および errors は、Unicode encode()メソッドの同じ名前のパラメーターと同じ意味を持ちます。 使用するコーデックは、Pythonコーデックレジストリを使用して検索されます。 コーデックによって例外が発生した場合は、 NULL を返します。

バージョン2.5で変更:この関数は、サイズintタイプを使用していました。 これには、64ビットシステムを適切にサポートするためにコードの変更が必要になる場合があります。

PyObject *PyUnicode_AsEncodedString(PyObject *unicode, const char *encoding, const char *errors)
Unicodeオブジェクトをエンコードし、結果をPython文字列オブジェクトとして返します。 encoding および errors は、Unicode encode()メソッドの同じ名前のパラメーターと同じ意味を持ちます。 使用するコーデックは、Pythonコーデックレジストリを使用して検索されます。 コーデックによって例外が発生した場合は、 NULL を返します。


UTF-8コーデック

これらはUTF-8コーデックAPIです。

PyObject *PyUnicode_DecodeUTF8(const char *s, Py_ssize_t size, const char *errors)

UTF-8でエンコードされた文字列 sサイズバイトをデコードして、Unicodeオブジェクトを作成します。 コーデックによって例外が発生した場合は、 NULL を返します。

バージョン2.5で変更:この関数は、サイズintタイプを使用していました。 これには、64ビットシステムを適切にサポートするためにコードの変更が必要になる場合があります。

PyObject *PyUnicode_DecodeUTF8Stateful(const char *s, Py_ssize_t size, const char *errors, Py_ssize_t *consumed)

消費NULL の場合、 PyUnicode_DecodeUTF8()のように動作します。 使用済みNULL でない場合、後続の不完全なUTF-8バイトシーケンスはエラーとして扱われません。 これらのバイトはデコードされず、デコードされたバイト数は使用済みに格納されます。

バージョン2.4の新機能。

バージョン2.5で変更:この関数は、サイズintタイプを使用していました。 これには、64ビットシステムを適切にサポートするためにコードの変更が必要になる場合があります。

PyObject *PyUnicode_EncodeUTF8(const Py_UNICODE *s, Py_ssize_t size, const char *errors)

指定されたサイズPy_UNICODE バッファー s をUTF-8を使用してエンコードし、Python文字列オブジェクトを返します。 コーデックによって例外が発生した場合は、 NULL を返します。

バージョン2.5で変更:この関数は、サイズintタイプを使用していました。 これには、64ビットシステムを適切にサポートするためにコードの変更が必要になる場合があります。

PyObject *PyUnicode_AsUTF8String(PyObject *unicode)
UTF-8を使用してUnicodeオブジェクトをエンコードし、結果をPython文字列オブジェクトとして返します。 エラー処理は「厳密」です。 コーデックによって例外が発生した場合は、 NULL を返します。


UTF-32コーデック

これらはUTF-32コーデックAPIです。

PyObject *PyUnicode_DecodeUTF32(const char *s, Py_ssize_t size, const char *errors, int *byteorder)

UTF-32でエンコードされたバッファ文字列から size バイトをデコードし、対応するUnicodeオブジェクトを返します。 errorsNULL 以外の場合)は、エラー処理を定義します。 デフォルトは「strict」です。

byteorderNULL 以外の場合、デコーダーは指定されたバイトオーダーを使用してデコードを開始します。

*byteorder == -1: little endian
*byteorder == 0:  native order
*byteorder == 1:  big endian

*byteorderがゼロで、入力データの最初の4バイトがバイトオーダーマーク(BOM)の場合、デコーダーはこのバイトオーダーに切り替わり、BOMは結果のUnicode文字列にコピーされません。 *byteorder-1または1の場合、任意のバイト順マークが出力にコピーされます。

完了後、 * byteorder は、入力データの最後の現在のバイトオーダーに設定されます。

狭いビルドコードでは、BMPの外側のポイントは代理ペアとしてデコードされます。

byteorderNULL の場合、コーデックはネイティブオーダーモードで起動します。

コーデックによって例外が発生した場合は、 NULL を返します。

バージョン2.6の新機能。

PyObject *PyUnicode_DecodeUTF32Stateful(const char *s, Py_ssize_t size, const char *errors, int *byteorder, Py_ssize_t *consumed)

消費NULL の場合、 PyUnicode_DecodeUTF32()のように動作します。 使用済みNULL でない場合、 PyUnicode_DecodeUTF32Stateful()は、後続の不完全なUTF-32バイトシーケンス(4で割り切れないバイト数など)を次のように扱いません。エラー。 これらのバイトはデコードされず、デコードされたバイト数は使用済みに格納されます。

バージョン2.6の新機能。

PyObject *PyUnicode_EncodeUTF32(const Py_UNICODE *s, Py_ssize_t size, const char *errors, int byteorder)

s のUnicodeデータのUTF-32エンコード値を保持するPythonバイトオブジェクトを返します。 出力は、次のバイト順序に従って書き込まれます。

byteorder == -1: little endian
byteorder == 0:  native byte order (writes a BOM mark)
byteorder == 1:  big endian

バイトオーダーが0の場合、出力文字列は常にUnicode BOMマーク(U + FEFF)で始まります。 他の2つのモードでは、BOMマークは付加されません。

Py_UNICODE_WIDE が定義されていない場合、サロゲートペアは単一のコードポイントとして出力されます。

コーデックによって例外が発生した場合は、 NULL を返します。

バージョン2.6の新機能。

PyObject *PyUnicode_AsUTF32String(PyObject *unicode)

ネイティブバイトオーダーでUTF-32エンコーディングを使用してPython文字列を返します。 文字列は常にBOMマークで始まります。 エラー処理は「厳密」です。 コーデックによって例外が発生した場合は、 NULL を返します。

バージョン2.6の新機能。


UTF-16コーデック

これらはUTF-16コーデックAPIです。

PyObject *PyUnicode_DecodeUTF16(const char *s, Py_ssize_t size, const char *errors, int *byteorder)

UTF-16でエンコードされたバッファ文字列から size バイトをデコードし、対応するUnicodeオブジェクトを返します。 errorsNULL 以外の場合)は、エラー処理を定義します。 デフォルトは「strict」です。

byteorderNULL 以外の場合、デコーダーは指定されたバイトオーダーを使用してデコードを開始します。

*byteorder == -1: little endian
*byteorder == 0:  native order
*byteorder == 1:  big endian

*byteorderがゼロで、入力データの最初の2バイトがバイトオーダーマーク(BOM)の場合、デコーダーはこのバイトオーダーに切り替わり、BOMは結果のUnicode文字列にコピーされません。 *byteorder-1または1の場合、任意のバイト順マークが出力にコピーされます(\ufeffまたは\ufffe文字)。

完了後、 * byteorder は、入力データの最後の現在のバイトオーダーに設定されます。

byteorderNULL の場合、コーデックはネイティブオーダーモードで起動します。

コーデックによって例外が発生した場合は、 NULL を返します。

バージョン2.5で変更:この関数は、サイズintタイプを使用していました。 これには、64ビットシステムを適切にサポートするためにコードの変更が必要になる場合があります。

PyObject *PyUnicode_DecodeUTF16Stateful(const char *s, Py_ssize_t size, const char *errors, int *byteorder, Py_ssize_t *consumed)

消費NULL の場合、 PyUnicode_DecodeUTF16()のように動作します。 使用済みNULL でない場合、 PyUnicode_DecodeUTF16Stateful()は、後続の不完全なUTF-16バイトシーケンス(奇数バイト数や分割サロゲートペアなど)を処理しません。 )エラーとして。 これらのバイトはデコードされず、デコードされたバイト数は使用済みに格納されます。

バージョン2.4の新機能。

バージョン2.5で変更:この関数は、サイズintタイプを使用し、消費int *タイプを使用しました。 これには、64ビットシステムを適切にサポートするためにコードの変更が必要になる場合があります。

PyObject *PyUnicode_EncodeUTF16(const Py_UNICODE *s, Py_ssize_t size, const char *errors, int byteorder)

s のUnicodeデータのUTF-16エンコード値を保持するPython文字列オブジェクトを返します。 出力は、次のバイト順序に従って書き込まれます。

byteorder == -1: little endian
byteorder == 0:  native byte order (writes a BOM mark)
byteorder == 1:  big endian

バイトオーダーが0の場合、出力文字列は常にUnicode BOMマーク(U + FEFF)で始まります。 他の2つのモードでは、BOMマークは付加されません。

Py_UNICODE_WIDE が定義されている場合、単一の Py_UNICODE 値がサロゲートペアとして表される場合があります。 定義されていない場合、各 Py_UNICODE 値はUCS-2文字として解釈されます。

コーデックによって例外が発生した場合は、 NULL を返します。

バージョン2.5で変更:この関数は、サイズintタイプを使用していました。 これには、64ビットシステムを適切にサポートするためにコードの変更が必要になる場合があります。

PyObject *PyUnicode_AsUTF16String(PyObject *unicode)
ネイティブバイトオーダーでUTF-16エンコーディングを使用してPython文字列を返します。 文字列は常にBOMマークで始まります。 エラー処理は「厳密」です。 コーデックによって例外が発生した場合は、 NULL を返します。


UTF-7コーデック

これらはUTF-7コーデックAPIです。

PyObject *PyUnicode_DecodeUTF7(const char *s, Py_ssize_t size, const char *errors)
UTF-7でエンコードされた文字列 sサイズバイトをデコードして、Unicodeオブジェクトを作成します。 コーデックによって例外が発生した場合は、 NULL を返します。
PyObject *PyUnicode_DecodeUTF7Stateful(const char *s, Py_ssize_t size, const char *errors, Py_ssize_t *consumed)
消費NULL の場合、 PyUnicode_DecodeUTF7()のように動作します。 使用済みNULL でない場合、後続の不完全なUTF-7base-64セクションはエラーとして扱われません。 これらのバイトはデコードされず、デコードされたバイト数は使用済みに格納されます。
PyObject *PyUnicode_EncodeUTF7(const Py_UNICODE *s, Py_ssize_t size, int base64SetO, int base64WhiteSpace, const char *errors)

UTF-7を使用して、指定されたサイズの Py_UNICODE バッファーをエンコードし、Pythonバイトオブジェクトを返します。 コーデックによって例外が発生した場合は、 NULL を返します。

base64SetO がゼロ以外の場合、「Set O」(特別な意味を持たない句読点)はbase-64でエンコードされます。 base64WhiteSpace がゼロ以外の場合、空白はbase-64でエンコードされます。 Python「utf-7」コーデックでは、両方ともゼロに設定されています。


Unicode-エスケープコーデック

これらは「UnicodeEscape」コーデックAPIです。

PyObject *PyUnicode_DecodeUnicodeEscape(const char *s, Py_ssize_t size, const char *errors)

Unicodeエスケープでエンコードされた文字列 sサイズバイトをデコードして、Unicodeオブジェクトを作成します。 コーデックによって例外が発生した場合は、 NULL を返します。

バージョン2.5で変更:この関数は、サイズintタイプを使用していました。 これには、64ビットシステムを適切にサポートするためにコードの変更が必要になる場合があります。

PyObject *PyUnicode_EncodeUnicodeEscape(const Py_UNICODE *s, Py_ssize_t size)

Unicode-Escapeを使用して、指定された sizePy_UNICODE バッファーをエンコードし、Python文字列オブジェクトを返します。 コーデックによって例外が発生した場合は、 NULL を返します。

バージョン2.5で変更:この関数は、サイズintタイプを使用していました。 これには、64ビットシステムを適切にサポートするためにコードの変更が必要になる場合があります。

PyObject *PyUnicode_AsUnicodeEscapeString(PyObject *unicode)
Unicode-Escapeを使用してUnicodeオブジェクトをエンコードし、結果をPython文字列オブジェクトとして返します。 エラー処理は「厳密」です。 コーデックによって例外が発生した場合は、 NULL を返します。


Raw-Unicode-エスケープコーデック

これらは「RawUnicodeEscape」コーデックAPIです。

PyObject *PyUnicode_DecodeRawUnicodeEscape(const char *s, Py_ssize_t size, const char *errors)

Raw-Unicode-Escapeでエンコードされた文字列 sサイズバイトをデコードして、Unicodeオブジェクトを作成します。 コーデックによって例外が発生した場合は、 NULL を返します。

バージョン2.5で変更:この関数は、サイズintタイプを使用していました。 これには、64ビットシステムを適切にサポートするためにコードの変更が必要になる場合があります。

PyObject *PyUnicode_EncodeRawUnicodeEscape(const Py_UNICODE *s, Py_ssize_t size, const char *errors)

Raw-Unicode-Escapeを使用して、指定された sizePy_UNICODE バッファーをエンコードし、Python文字列オブジェクトを返します。 コーデックによって例外が発生した場合は、 NULL を返します。

バージョン2.5で変更:この関数は、サイズintタイプを使用していました。 これには、64ビットシステムを適切にサポートするためにコードの変更が必要になる場合があります。

PyObject *PyUnicode_AsRawUnicodeEscapeString(PyObject *unicode)
Raw-Unicode-Escapeを使用してUnicodeオブジェクトをエンコードし、結果をPython文字列オブジェクトとして返します。 エラー処理は「厳密」です。 コーデックによって例外が発生した場合は、 NULL を返します。


ラテン語-1コーデック

これらはLatin-1コーデックAPIです。Latin-1は最初の256のUnicode序数に対応し、エンコード中にコーデックによって受け入れられるのはこれらだけです。

PyObject *PyUnicode_DecodeLatin1(const char *s, Py_ssize_t size, const char *errors)

Latin-1でエンコードされた文字列 sサイズバイトをデコードして、Unicodeオブジェクトを作成します。 コーデックによって例外が発生した場合は、 NULL を返します。

バージョン2.5で変更:この関数は、サイズintタイプを使用していました。 これには、64ビットシステムを適切にサポートするためにコードの変更が必要になる場合があります。

PyObject *PyUnicode_EncodeLatin1(const Py_UNICODE *s, Py_ssize_t size, const char *errors)

Latin-1を使用して、指定された sizePy_UNICODE バッファーをエンコードし、Python文字列オブジェクトを返します。 コーデックによって例外が発生した場合は、 NULL を返します。

バージョン2.5で変更:この関数は、サイズintタイプを使用していました。 これには、64ビットシステムを適切にサポートするためにコードの変更が必要になる場合があります。

PyObject *PyUnicode_AsLatin1String(PyObject *unicode)
Latin-1を使用してUnicodeオブジェクトをエンコードし、結果をPython文字列オブジェクトとして返します。 エラー処理は「厳密」です。 コーデックによって例外が発生した場合は、 NULL を返します。


ASCIIコーデック

これらはASCIIコーデックAPIです。 7ビットのASCIIデータのみが受け入れられます。 他のすべてのコードはエラーを生成します。

PyObject *PyUnicode_DecodeASCII(const char *s, Py_ssize_t size, const char *errors)

ASCIIエンコードされた文字列 ssize バイトをデコードしてUnicodeオブジェクトを作成します。 コーデックによって例外が発生した場合は、 NULL を返します。

バージョン2.5で変更:この関数は、サイズintタイプを使用していました。 これには、64ビットシステムを適切にサポートするためにコードの変更が必要になる場合があります。

PyObject *PyUnicode_EncodeASCII(const Py_UNICODE *s, Py_ssize_t size, const char *errors)

指定されたサイズPy_UNICODE バッファーをASCIIを使用してエンコードし、Python文字列オブジェクトを返します。 コーデックによって例外が発生した場合は、 NULL を返します。

バージョン2.5で変更:この関数は、サイズintタイプを使用していました。 これには、64ビットシステムを適切にサポートするためにコードの変更が必要になる場合があります。

PyObject *PyUnicode_AsASCIIString(PyObject *unicode)
ASCIIを使用してUnicodeオブジェクトをエンコードし、結果をPython文字列オブジェクトとして返します。 エラー処理は「厳密」です。 コーデックによって例外が発生した場合は、 NULL を返します。


文字コード表コーデック

このコーデックは、多くの異なるコーデックを実装するために使用できるという点で特別です(実際、これはencodingsパッケージに含まれるほとんどの標準コーデックを取得するために行われたことです)。 コーデックは、マッピングを使用して文字をエンコードおよびデコードします。

デコードマッピングは、単一の文字列文字を単一のUnicode文字、整数(Unicode序数として解釈される)またはNone(「未定義のマッピング」を意味し、エラーを引き起こす)にマップする必要があります。

エンコーディングマッピングは、単一のUnicode文字を単一の文字列文字、整数(Latin-1序数として解釈される)またはNone(「未定義のマッピング」を意味し、エラーを引き起こす)にマップする必要があります。

提供されるマッピングオブジェクトは、__ getitem__マッピングインターフェイスのみをサポートする必要があります。

文字ルックアップがLookupErrorで失敗した場合、文字はそのままコピーされます。これは、その序数値がUnicodeまたはLatin-1の序数応答として解釈されることを意味します。 このため、マッピングには、文字を異なるコードポイントにマッピングするマッピングのみを含める必要があります。

マッピングコーデックAPIは次のとおりです。

PyObject *PyUnicode_DecodeCharmap(const char *s, Py_ssize_t size, PyObject *mapping, const char *errors)

指定された mapping オブジェクトを使用して、エンコードされた文字列 ssize バイトをデコードしてUnicodeオブジェクトを作成します。 コーデックによって例外が発生した場合は、 NULL を返します。 マッピングNULL の場合、latin-1デコードが実行されます。 それ以外の場合は、ルックアップテーブルとして扱われる辞書マッピングバイトまたはUnicode文字列にすることができます。 文字列の長さを超えるバイト値とU + FFFEの「文字」は「未定義のマッピング」として扱われます。

バージョン2.4で変更:マッピング引数としてUnicode文字列を許可しました。

バージョン2.5で変更:この関数は、サイズintタイプを使用していました。 これには、64ビットシステムを適切にサポートするためにコードの変更が必要になる場合があります。

PyObject *PyUnicode_EncodeCharmap(const Py_UNICODE *s, Py_ssize_t size, PyObject *mapping, const char *errors)

指定された mapping オブジェクトを使用して、指定された sizePy_UNICODE バッファーをエンコードし、Python文字列オブジェクトを返します。 コーデックによって例外が発生した場合は、 NULL を返します。

バージョン2.5で変更:この関数は、サイズintタイプを使用していました。 これには、64ビットシステムを適切にサポートするためにコードの変更が必要になる場合があります。

PyObject *PyUnicode_AsCharmapString(PyObject *unicode, PyObject *mapping)
指定された mapping オブジェクトを使用してUnicodeオブジェクトをエンコードし、結果をPython文字列オブジェクトとして返します。 エラー処理は「厳密」です。 コーデックによって例外が発生した場合は、 NULL を返します。

次のコーデックAPIは、UnicodeをUnicodeにマップするという点で特別です。

PyObject *PyUnicode_TranslateCharmap(const Py_UNICODE *s, Py_ssize_t size, PyObject *table, const char *errors)

指定されたサイズPy_UNICODE バッファーに文字マッピングテーブルを適用して変換し、結果のUnicodeオブジェクトを返します。 コーデックによって例外が発生した場合は、 NULL を返します。

mapping テーブルは、Unicode序数整数をUnicode序数整数またはNone(文字の削除を引き起こす)にマップする必要があります。

マッピングテーブルは、__getitem__()インターフェイスを提供するだけで済みます。 辞書とシーケンスはうまく機能します。 マップされていない文字序数(LookupErrorを引き起こすもの)はそのまま残され、そのままコピーされます。

バージョン2.5で変更:この関数は、サイズintタイプを使用していました。 これには、64ビットシステムを適切にサポートするためにコードの変更が必要になる場合があります。


Windows用のMBCSコーデック

これらはMBCSコーデックAPIです。 これらは現在Windowsでのみ使用可能であり、Win32MBCSコンバーターを使用して変換を実装します。 MBCS(またはDBCS)は、1つだけではなく、エンコーディングのクラスであることに注意してください。 ターゲットエンコーディングは、コーデックを実行しているマシンのユーザー設定によって定義されます。

PyObject *PyUnicode_DecodeMBCS(const char *s, Py_ssize_t size, const char *errors)

MBCSでエンコードされた文字列 sサイズバイトをデコードして、Unicodeオブジェクトを作成します。 コーデックによって例外が発生した場合は、 NULL を返します。

バージョン2.5で変更:この関数は、サイズintタイプを使用していました。 これには、64ビットシステムを適切にサポートするためにコードの変更が必要になる場合があります。

PyObject *PyUnicode_DecodeMBCSStateful(const char *s, int size, const char *errors, int *consumed)

消費NULL の場合、 PyUnicode_DecodeMBCS()のように動作します。 使用済みNULL でない場合、 PyUnicode_DecodeMBCSStateful()は後続の先行バイトをデコードせず、デコードされたバイト数は消費済みに格納されます

バージョン2.5の新機能。

PyObject *PyUnicode_EncodeMBCS(const Py_UNICODE *s, Py_ssize_t size, const char *errors)

指定されたサイズPy_UNICODE バッファーを、MBCSを使用してエンコードし、Python文字列オブジェクトを返します。 コーデックによって例外が発生した場合は、 NULL を返します。

バージョン2.5で変更:この関数は、サイズintタイプを使用していました。 これには、64ビットシステムを適切にサポートするためにコードの変更が必要になる場合があります。

PyObject *PyUnicode_AsMBCSString(PyObject *unicode)
MBCSを使用してUnicodeオブジェクトをエンコードし、結果をPython文字列オブジェクトとして返します。 エラー処理は「厳密」です。 コーデックによって例外が発生した場合は、 NULL を返します。


メソッドとスロット

メソッドとスロット機能

次のAPIは、入力時にUnicodeオブジェクトと文字列を処理し(説明では文字列と呼びます)、必要に応じてUnicodeオブジェクトまたは整数を返します。

例外が発生した場合、これらはすべて NULL または-1を返します。

PyObject *PyUnicode_Concat(PyObject *left, PyObject *right)
2つの文字列を連結して、新しいUnicode文字列を作成します。
PyObject *PyUnicode_Split(PyObject *s, PyObject *sep, Py_ssize_t maxsplit)

文字列を分割して、Unicode文字列のリストを提供します。 sepNULL の場合、すべての空白文字列で分割が行われます。 それ以外の場合、分割は指定されたセパレータで発生します。 最大で maxsplit 分割が実行されます。 負の場合、制限は設定されません。 結果のリストにはセパレーターは含まれません。

バージョン2.5で変更:この関数は、 maxsplitintタイプを使用していました。 これには、64ビットシステムを適切にサポートするためにコードの変更が必要になる場合があります。

PyObject *PyUnicode_Splitlines(PyObject *s, int keepend)
Unicode文字列を改行で分割し、Unicode文字列のリストを返します。 CRLFは1つの改行と見なされます。 keepend0の場合、改行文字は結果の文字列に含まれません。
PyObject *PyUnicode_Translate(PyObject *str, PyObject *table, const char *errors)

文字マッピングテーブルを適用して文字列を変換し、結果のUnicodeオブジェクトを返します。

マッピングテーブルは、Unicode序数整数をUnicode序数整数またはNone(文字の削除を引き起こす)にマップする必要があります。

マッピングテーブルは、__getitem__()インターフェイスを提供するだけで済みます。 辞書とシーケンスはうまく機能します。 マップされていない文字序数(LookupErrorを引き起こすもの)はそのまま残され、そのままコピーされます。

エラーは、コーデックの通常の意味を持ちます。 デフォルトのエラー処理を使用することを示す NULL の場合があります。

PyObject *PyUnicode_Join(PyObject *separator, PyObject *seq)
指定された separator を使用して文字列のシーケンスを結合し、結果のUnicode文字列を返します。
Py_ssize_t PyUnicode_Tailmatch(PyObject *str, PyObject *substr, Py_ssize_t start, Py_ssize_t end, int direction)

substr が指定されたテールエンドでstr[start:end]と一致する場合、1を返します( direction == -1はプレフィックス一致を行うことを意味し、 direction == 1サフィックスが一致します)、それ以外の場合は0。 エラーが発生した場合は、-1を返します。

バージョン2.5で変更:この関数は、 start および endintタイプを使用していました。 これには、64ビットシステムを適切にサポートするためにコードの変更が必要になる場合があります。

Py_ssize_t PyUnicode_Find(PyObject *str, PyObject *substr, Py_ssize_t start, Py_ssize_t end, int direction)

指定された方向を使用してstr[start:end]substr の最初の位置を返します(方向 == 1は順方向を実行することを意味します検索、方向 == -1後方検索)。 戻り値は最初の一致のインデックスです。 -1の値は一致が見つからなかったことを示し、-2はエラーが発生して例外が設定されたことを示します。

バージョン2.5で変更:この関数は、 start および endintタイプを使用していました。 これには、64ビットシステムを適切にサポートするためにコードの変更が必要になる場合があります。

Py_ssize_t PyUnicode_Count(PyObject *str, PyObject *substr, Py_ssize_t start, Py_ssize_t end)

str[start:end]内の substr の重複しないオカレンスの数を返します。 エラーが発生した場合は、-1を返します。

バージョン2.5で変更:この関数はintタイプを返し、 start および endintタイプを使用しました。 これには、64ビットシステムを適切にサポートするためにコードの変更が必要になる場合があります。

PyObject *PyUnicode_Replace(PyObject *str, PyObject *substr, PyObject *replstr, Py_ssize_t maxcount)

str 内の substr の最大 maxcount オカレンスを replstr に置き換え、結果のUnicodeオブジェクトを返します。 maxcount == -1は、すべてのオカレンスを置き換えることを意味します。

バージョン2.5で変更:この関数は、 maxcountintタイプを使用していました。 これには、64ビットシステムを適切にサポートするためにコードの変更が必要になる場合があります。

int PyUnicode_Compare(PyObject *left, PyObject *right)
2つの文字列を比較し、-101をそれぞれ、より小さい、等しい、およびより大きい場合に返します。
int PyUnicode_RichCompare(PyObject *left, PyObject *right, int op)

2つのUnicode文字列をリッチ比較し、次のいずれかを返します。

  • NULL例外が発生した場合

  • 比較を成功させるには、Py_TrueまたはPy_False

  • Py_NotImplementedタイプの組み合わせが不明な場合

Py_EQPy_NEの比較では、引数のUnicodeへの変換がUnicodeDecodeErrorで失敗した場合に、UnicodeWarningが発生する可能性があることに注意してください。

op に指定できる値は、Py_GTPy_GEPy_EQPy_NEPy_LT、およびPy_LE

PyObject *PyUnicode_Format(PyObject *format, PyObject *args)
format および args から新しい文字列オブジェクトを返します。 これはformat % argsに類似しています。
int PyUnicode_Contains(PyObject *container, PyObject *element)

elementcontainer に含まれているかどうかを確認し、それに応じてtrueまたはfalseを返します。

element は、1つの要素のUnicode文字列に強制変換する必要があります。 エラーが発生した場合は、-1が返されます。