3

我有一个 Python 2.6 项目,我想使用系统编码将 utf-8 消息写入标准输出。然而,似乎直到 Python 3.2 才存在这样的函数:

PySys_FormatStdout

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

有没有办法从 Python 2.6 做到这一点?

为了澄清,我有一个横幅需要在 Py_Initialize() 之后和主解释器运行之前打印。该字符串是一个包含以下内容的 c 字面量:“\n and Copyright \xC2\xA9”

其中 \xC2\xA9 是 utf-8 版权符号。我在 gdb 中验证了版权符号的编码是否正确。

更新: 我刚刚决定所有这些悲伤都是不必要的,我将从启动横幅中删除冒犯性的角色。这个问题太多了,而且缺乏文档。我的期望是这会像 Tcl 一样,其中:

  1. 嵌入式解释器的 C-API 将使在系统编码中以 unicode 编写标准输出变得容易,而不是一些默认的 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 回答