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;