From 2777c021fc3bf6d2e33c58b774f8cbeb03ebe78c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Martin=20v=2E=20L=C3=B6wis?= Date: Wed, 19 Sep 2001 13:47:32 +0000 Subject: [PATCH] Patch #462849: Pass Unicode objects to file's .write method. --- Misc/NEWS | 5 +++++ Objects/fileobject.c | 11 ++++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS index f1037054d1..9ea0ac2d09 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -3,6 +3,11 @@ What's New in Python 2.2a4? Core +- PyFile_WriteObject now passes Unicode object to the file's write + method. As a result, all file-like object which may be the target + of a print statement must support Unicode objects, i.e. they must + at least convert them into ASCII strings. + - The builtin file type can be subclassed now. In the usual pattern, "file" is the name of the builtin type, and file() is a new builtin constructor, with the same signature as the builtin open() function. diff --git a/Objects/fileobject.c b/Objects/fileobject.c index 779b5faada..64bdb654a0 100644 --- a/Objects/fileobject.c +++ b/Objects/fileobject.c @@ -1503,9 +1503,14 @@ PyFile_WriteObject(PyObject *v, PyObject *f, int flags) writer = PyObject_GetAttrString(f, "write"); if (writer == NULL) return -1; - if (flags & Py_PRINT_RAW) - value = PyObject_Str(v); - else + if (flags & Py_PRINT_RAW) { + if (PyUnicode_Check(v)) { + value = v; + Py_INCREF(value); + } else + value = PyObject_Str(v); + } + else value = PyObject_Repr(v); if (value == NULL) { Py_DECREF(writer); -- 2.40.0