Index: Objects/unicodeobject.c =================================================================== --- Objects/unicodeobject.c (révision 69105) +++ Objects/unicodeobject.c (copie de travail) @@ -712,35 +712,15 @@ case 's': { /* UTF-8 */ - unsigned char*s; - s = va_arg(count, unsigned char*); - while (*s) { - if (*s < 128) { - n++; s++; - } else if (*s < 0xc0) { - /* invalid UTF-8 */ - n++; s++; - } else if (*s < 0xc0) { - n++; - s++; if(!*s)break; - s++; - } else if (*s < 0xe0) { - n++; - s++; if(!*s)break; - s++; if(!*s)break; - s++; - } else { - #ifdef Py_UNICODE_WIDE - n++; - #else - n+=2; - #endif - s++; if(!*s)break; - s++; if(!*s)break; - s++; if(!*s)break; - s++; - } - } + char*s; + PyObject *u; + s = va_arg(count, char*); + u = PyUnicode_DecodeUTF8(s, strlen(s), + "replace"); + if (!u) + goto fail; + n += PyUnicode_GET_SIZE(u); + Py_DECREF(u); break; } case 'U':