3

Python 2.6 のプロジェクトがあり、システム エンコーディングを使用して utf-8 メッセージを stdout に書き込みたいと考えています。ただし、そのような関数は Python 3.2 まで存在しないようです。

PySys_FormatStdout

http://docs.python.org/dev/c-api/sys.html

Python 2.6 からこれを行う方法はありますか?

明確にするために、Py_Initialize() の後、メイン インタープリターが実行される前に出力する必要があるバナーがあります。文字列は、"\n and Copyright \xC2\xA9" を含む c-literal です。

ここで、\xC2\xA9 は utf-8 著作権記号です。著作権記号が正しくエンコードされていることを gdb で確認しました。

更新: このような悲しみは必要ないと判断したので、スタートアップ バナーから問題のあるキャラクターを削除します。これには問題が多すぎて、ドキュメントが不足しています。私の期待は、これが Tcl のようなものになるだろうということでした。

  1. 組み込みインタープリターの C-API により、標準出力をシステムのエンコーディングでユニコードで簡単に書き出すことができ、デフォルトの ascii エンコーディングではありません。
  2. 問題のある文字が現在のエンコーディングに存在しない場合、例外はスローされません。代わりに、デフォルトの置換文字が表示されます。
  3. システムのエンコーディングを調べるためだけに、追加のモジュール (sys など) をインポートする必要はありません。
4

2 に答える 2

2

PyUnicode_DecodeUTF8()

PyObject_Print()

于 2010-12-21T19:14:33.013 に答える
1

PyFile_WriteObject()を使用できます:

f_stdout = PySys_GetObject("stdout");
text = PyUnicode_DecodeUTF8((char*)str, strlen(str), "strict");
PyFile_WriteObject(text, f_stdout, Py_PRINT_RAW);

最終的なエンコーディングがわかっている場合は、PyUnicode_AsEncodedString().

于 2010-12-21T20:33:46.380 に答える