Mercurial > cpython-lru_cache-weakref
diff Modules/_tkinter.c @ 26534:ca6fa69711bb legacy-trunk
Decode untyped strings from UTF-8.
| author | Martin v. Löwis <martin@v.loewis.de> |
|---|---|
| date | Wed, 04 Dec 2002 19:54:36 +0000 |
| parents | ad75efe2f0a6 |
| children | d755d4292f3f |
line wrap: on
line diff
--- a/Modules/_tkinter.c Wed Dec 04 12:40:49 2002 +0000 +++ b/Modules/_tkinter.c Wed Dec 04 19:54:36 2002 +0000 @@ -770,8 +770,33 @@ PyObject *result = NULL; TkappObject *app = (TkappObject*)tkapp; - if (value->typePtr == NULL) - return PyString_FromStringAndSize(value->bytes, value->length); + if (value->typePtr == NULL) { + /* If the result contains any bytes with the top bit set, + it's UTF-8 and we should decode it to Unicode */ +#ifdef Py_USING_UNICODE + int i; + char *s = value->bytes; + int len = value->length; + for (i = 0; i < len; i++) { + if (value->bytes[i] & 0x80) + break; + } + + if (i == value->length) + result = PyString_FromStringAndSize(s, len); + else { + /* Convert UTF-8 to Unicode string */ + result = PyUnicode_DecodeUTF8(s, len, "strict"); + if (result == NULL) { + PyErr_Clear(); + result = PyString_FromStringAndSize(s, len); + } + } +#else + res = PyString_FromStringAndSize(value->bytes, value->length); +#endif + return result; + } if (value->typePtr == app->BooleanType) { result = value->internalRep.longValue ? Py_True : Py_False;
