3

Pythonistas、

Null で終了する大量の UNICODE UTF-16 でエンコードされた C 文字列を Python アプリケーションに渡す Python 拡張機能を C で作成しようとしています。私の C ライブラリの UNICODE 文字列は、常に 16 ビットであることが保証されています。wchar_t のサイズが異なる可能性があるため、LINUX の C ライブラリで wchar_t を使用していません。

多くの関数 (PyUnicode_AsUTF8String、PyString_FromStringAndSize、PyString_FromString など) を見つけましたが、これらの関数はすべて 8 ビットの文字/文字列表現用に設計されています。

Python のドキュメント (http://docs.python.org/howto/unicode.html) には次のように書かれています。

「内部では、Python は、Python インタープリターがどのようにコンパイルされたかに応じて、Unicode 文字列を 16 ビットまたは 32 ビットの整数として表します。」

Python インタープリターが「ボンネットの下」で 16 ビットを使用する場合は特に、Windows で、Python インターフェイスの目的でのみ、すべての UTF-16 C 文字列を UTF-8 C 文字列に変換することによるパフォーマンスの低下を回避したいと考えています。

この課題に取り組む方法についてのアイデアは高く評価されます。

ありがとう、トーマス

4

1 に答える 1

2

データのコピーを避けることはできません (Python C API を突破しない限り) が、PyUnicode_DecodeUTF16;を使用して、UTF-16 データから直接 Python Unicode オブジェクトを作成できます。http://docs.python.org/c-api/unicode.html#utf-16-codecsを参照してください。

于 2012-04-06T08:11:09.100 に答える