[Interest] Using UTF-8 code page with Qt5 on Windows?

Alvin Wong alvinhochun at gmail.com
Thu May 19 05:31:55 CEST 2022


Hi Thiago,

> Qt uses almost exclusively the W versions of the Win32 API. There are a couple
> of cases of A use, but those are the exception and you don't have to worry
> about them. Those and the "System" codec would be affected by your switch to a
> different codepage, but that's your intention anyway and I don't see a
> problem.

Thank you for the reassurance!

> I think you're right and that code definitely looks fishy.
>
> And it looks like we lost the tst_Utf8 test in the QStringConverter change,
> particularly tst_Utf8::charByChar, which might have caught this. Looks like
> tst_QStringConverter does not attempt to test that the system codec very well
> either, because we can't statically know what it can do. tst_Utf8 had a
> detection to see if the system codec happened to be UTF-8.
>
> Since you're still on 5.12, tst_Utf8 (qtbase/tests/auto/codecs/utf8) is there.
> Can you try to run on with the UTF-8 codepage and see if it passes?

Thanks for pointing me to the test. I compiled the test and created an
application manifest for it to use UTF-8. It correctly detected the
system codec to be UTF-8 and reported several failures and a bunch of
warnings. I've attached the test output.

This gave me an idea: perhaps the easiest way for Qt to fix it would
be to check `GetACP() == CP_UTF8`, and if it is true then just use
Qt's built-in UTF-8 support and bypass MultiByteToWideChar completely.

> As far as I know, it already does. The Vietnamese locale for Windows has been
> using UTF-8 for years (probably since forever) and there's no reason that Qt
> shouldn't support it.

I don't have first-hand experience with Vietnamese Windows but isn't
Windows-1258 the Vietnamese code page? I know vaguely that
Unicode-only locales (not Vietnamese) are a thing on Windows, but I
thought they had no way to use UTF-8 as the ACP until the beta UTF-8
support landed on Windows 10.

Best Regards,
Alvin Wong
-------------- next part --------------
********* Start testing of tst_Utf8 *********
Config: Using QtTest library 5.12.12, Qt 5.12.12 (x86_64-little_endian-llp64 shared (dynamic) release build; by Clang 14.0.0 (https://github.com/llvm/llvm-project.git 329fda39c507e8740978d10458451dcdb21563be))
QINFO  : tst_Utf8::initTestCase() locale is utf8
PASS   : tst_Utf8::initTestCase()
PASS   : tst_Utf8::roundTrip(utf8codec:empty)
PASS   : tst_Utf8::roundTrip(utf8codec:nul)
PASS   : tst_Utf8::roundTrip(utf8codec:ascii)
PASS   : tst_Utf8::roundTrip(utf8codec:ascii2)
PASS   : tst_Utf8::roundTrip(utf8codec:utf8_1)
PASS   : tst_Utf8::roundTrip(utf8codec:utf8_2)
PASS   : tst_Utf8::roundTrip(utf8codec:utf8_4)
PASS   : tst_Utf8::roundTrip(utf8codec:utf8_5)
PASS   : tst_Utf8::roundTrip(utf8codec:utf8_6)
PASS   : tst_Utf8::roundTrip(utf8codec:utf8_7)
PASS   : tst_Utf8::roundTrip(utf8codec:utf8_8)
PASS   : tst_Utf8::roundTrip(localecodec:empty)
FAIL!  : tst_Utf8::roundTrip(localecodec:nul) Compared values are not the same
   Actual   (from8Bit(utf8)): ""
   Expected (utf16)         : "\u0000"
D:\dev\krita\src-master-build\clang_db\ext_qt\s\qtbase\tests\auto\corelib\codecs\utf8\tst_utf8.cpp(156) : failure location
PASS   : tst_Utf8::roundTrip(localecodec:ascii)
PASS   : tst_Utf8::roundTrip(localecodec:ascii2)
PASS   : tst_Utf8::roundTrip(localecodec:utf8_1)
PASS   : tst_Utf8::roundTrip(localecodec:utf8_2)
PASS   : tst_Utf8::roundTrip(localecodec:utf8_4)
PASS   : tst_Utf8::roundTrip(localecodec:utf8_5)
PASS   : tst_Utf8::roundTrip(localecodec:utf8_6)
PASS   : tst_Utf8::roundTrip(localecodec:utf8_7)
PASS   : tst_Utf8::roundTrip(localecodec:utf8_8)
PASS   : tst_Utf8::charByChar(utf8codec:empty)
PASS   : tst_Utf8::charByChar(utf8codec:nul)
PASS   : tst_Utf8::charByChar(utf8codec:ascii)
PASS   : tst_Utf8::charByChar(utf8codec:ascii2)
PASS   : tst_Utf8::charByChar(utf8codec:utf8_1)
PASS   : tst_Utf8::charByChar(utf8codec:utf8_2)
PASS   : tst_Utf8::charByChar(utf8codec:utf8_4)
PASS   : tst_Utf8::charByChar(utf8codec:utf8_5)
PASS   : tst_Utf8::charByChar(utf8codec:utf8_6)
PASS   : tst_Utf8::charByChar(utf8codec:utf8_7)
PASS   : tst_Utf8::charByChar(utf8codec:utf8_8)
PASS   : tst_Utf8::charByChar(localecodec:empty)
FAIL!  : tst_Utf8::charByChar(localecodec:nul) Compared values are not the same
   Actual   (decoded): ""
   Expected (utf16)  : "\u0000"
D:\dev\krita\src-master-build\clang_db\ext_qt\s\qtbase\tests\auto\corelib\codecs\utf8\tst_utf8.cpp(205) : failure location
PASS   : tst_Utf8::charByChar(localecodec:ascii)
PASS   : tst_Utf8::charByChar(localecodec:ascii2)
PASS   : tst_Utf8::charByChar(localecodec:utf8_1)
FAIL!  : tst_Utf8::charByChar(localecodec:utf8_2) Compared values are not the same
   Actual   (decoded): "\uFFFD"
   Expected (utf16)  : "\u20AC"
D:\dev\krita\src-master-build\clang_db\ext_qt\s\qtbase\tests\auto\corelib\codecs\utf8\tst_utf8.cpp(205) : failure location
PASS   : tst_Utf8::charByChar(localecodec:utf8_4)
FAIL!  : tst_Utf8::charByChar(localecodec:utf8_5) Compared values are not the same
   Actual   (encoded): "\xEF\xBF\xBD\xEF\xBF\xBD"
   Expected (utf8)   : "\xF0\x90\x88\x83"
D:\dev\krita\src-master-build\clang_db\ext_qt\s\qtbase\tests\auto\corelib\codecs\utf8\tst_utf8.cpp(193) : failure location
FAIL!  : tst_Utf8::charByChar(localecodec:utf8_6) Compared values are not the same
   Actual   (encoded): "\xEF\xBF\xBD\xEF\xBF\xBD"
   Expected (utf8)   : "\xF4\x8F\xBF\xBD"
D:\dev\krita\src-master-build\clang_db\ext_qt\s\qtbase\tests\auto\corelib\codecs\utf8\tst_utf8.cpp(193) : failure location
FAIL!  : tst_Utf8::charByChar(localecodec:utf8_7) Compared values are not the same
   Actual   (decoded): "abc\u00A0\u00E1\u00E9\u01FD \uFFFD\uFFFDef"
   Expected (utf16)  : "abc\u00A0\u00E1\u00E9\u01FD \u20ACdef"
D:\dev\krita\src-master-build\clang_db\ext_qt\s\qtbase\tests\auto\corelib\codecs\utf8\tst_utf8.cpp(205) : failure location
FAIL!  : tst_Utf8::charByChar(localecodec:utf8_8) Compared values are not the same
   Actual   (encoded): "abc\xC2\xA0\xC3\xA1\xC3\xA9\xC7\xBD \xEF\xBF\xBD\xEF\xBF\xBD \xE2\x82\xAC""def"
   Expected (utf8)   : "abc\xC2\xA0\xC3\xA1\xC3\xA9\xC7\xBD \xF4\x8F\xBF\xBD \xE2\x82\xAC""def"
D:\dev\krita\src-master-build\clang_db\ext_qt\s\qtbase\tests\auto\corelib\codecs\utf8\tst_utf8.cpp(193) : failure location
PASS   : tst_Utf8::invalidUtf8(utf8codec:bad-continuation-1char)
PASS   : tst_Utf8::invalidUtf8(utf8codec:bad-continuation-2chars-1)
PASS   : tst_Utf8::invalidUtf8(utf8codec:bad-continuation-2chars-2)
PASS   : tst_Utf8::invalidUtf8(utf8codec:bad-continuation-2chars-3)
PASS   : tst_Utf8::invalidUtf8(utf8codec:bad-continuation-3chars-1)
PASS   : tst_Utf8::invalidUtf8(utf8codec:bad-continuation-3chars-2)
PASS   : tst_Utf8::invalidUtf8(utf8codec:bad-continuation-4chars-1)
PASS   : tst_Utf8::invalidUtf8(utf8codec:bad-continuation-4chars-2)
PASS   : tst_Utf8::invalidUtf8(utf8codec:bad-continuation-4chars-3)
PASS   : tst_Utf8::invalidUtf8(utf8codec:too-short-2chars)
PASS   : tst_Utf8::invalidUtf8(utf8codec:too-short-3chars-1)
PASS   : tst_Utf8::invalidUtf8(utf8codec:too-short-3chars-2)
PASS   : tst_Utf8::invalidUtf8(utf8codec:too-short-4chars-1)
PASS   : tst_Utf8::invalidUtf8(utf8codec:too-short-4chars-2)
PASS   : tst_Utf8::invalidUtf8(utf8codec:too-short-4chars-3)
PASS   : tst_Utf8::invalidUtf8(utf8codec:hi-surrogate)
PASS   : tst_Utf8::invalidUtf8(utf8codec:lo-surrogate)
PASS   : tst_Utf8::invalidUtf8(utf8codec:surrogate-pair)
PASS   : tst_Utf8::invalidUtf8(utf8codec:non-unicode-1)
PASS   : tst_Utf8::invalidUtf8(utf8codec:non-unicode-2)
PASS   : tst_Utf8::invalidUtf8(utf8codec:non-unicode-3)
PASS   : tst_Utf8::invalidUtf8(utf8codec:non-unicode-4)
PASS   : tst_Utf8::invalidUtf8(utf8codec:fe)
PASS   : tst_Utf8::invalidUtf8(utf8codec:fe-bis)
PASS   : tst_Utf8::invalidUtf8(utf8codec:ff)
PASS   : tst_Utf8::invalidUtf8(utf8codec:ff-bis)
PASS   : tst_Utf8::invalidUtf8(utf8codec:overlong-1-2)
PASS   : tst_Utf8::invalidUtf8(utf8codec:overlong-1-3)
PASS   : tst_Utf8::invalidUtf8(utf8codec:overlong-1-4)
PASS   : tst_Utf8::invalidUtf8(utf8codec:overlong-1-5)
PASS   : tst_Utf8::invalidUtf8(utf8codec:overlong-1-6)
PASS   : tst_Utf8::invalidUtf8(utf8codec:overlong-2-3)
PASS   : tst_Utf8::invalidUtf8(utf8codec:overlong-2-4)
PASS   : tst_Utf8::invalidUtf8(utf8codec:overlong-2-5)
PASS   : tst_Utf8::invalidUtf8(utf8codec:overlong-2-6)
PASS   : tst_Utf8::invalidUtf8(utf8codec:overlong-3-4)
PASS   : tst_Utf8::invalidUtf8(utf8codec:overlong-3-5)
PASS   : tst_Utf8::invalidUtf8(utf8codec:overlong-3-6)
PASS   : tst_Utf8::invalidUtf8(utf8codec:overlong-4-5)
PASS   : tst_Utf8::invalidUtf8(utf8codec:overlong-4-6)
QWARN  : tst_Utf8::invalidUtf8(localecodec:bad-continuation-1char) System codec does not report failure when it should. Should report bug upstream.
PASS   : tst_Utf8::invalidUtf8(localecodec:bad-continuation-1char)
QWARN  : tst_Utf8::invalidUtf8(localecodec:bad-continuation-2chars-1) System codec does not report failure when it should. Should report bug upstream.
PASS   : tst_Utf8::invalidUtf8(localecodec:bad-continuation-2chars-1)
QWARN  : tst_Utf8::invalidUtf8(localecodec:bad-continuation-2chars-2) System codec does not report failure when it should. Should report bug upstream.
PASS   : tst_Utf8::invalidUtf8(localecodec:bad-continuation-2chars-2)
QWARN  : tst_Utf8::invalidUtf8(localecodec:bad-continuation-2chars-3) System codec does not report failure when it should. Should report bug upstream.
PASS   : tst_Utf8::invalidUtf8(localecodec:bad-continuation-2chars-3)
QWARN  : tst_Utf8::invalidUtf8(localecodec:bad-continuation-3chars-1) System codec does not report failure when it should. Should report bug upstream.
PASS   : tst_Utf8::invalidUtf8(localecodec:bad-continuation-3chars-1)
QWARN  : tst_Utf8::invalidUtf8(localecodec:bad-continuation-3chars-2) System codec does not report failure when it should. Should report bug upstream.
PASS   : tst_Utf8::invalidUtf8(localecodec:bad-continuation-3chars-2)
QWARN  : tst_Utf8::invalidUtf8(localecodec:bad-continuation-4chars-1) System codec does not report failure when it should. Should report bug upstream.
PASS   : tst_Utf8::invalidUtf8(localecodec:bad-continuation-4chars-1)
QWARN  : tst_Utf8::invalidUtf8(localecodec:bad-continuation-4chars-2) System codec does not report failure when it should. Should report bug upstream.
PASS   : tst_Utf8::invalidUtf8(localecodec:bad-continuation-4chars-2)
QWARN  : tst_Utf8::invalidUtf8(localecodec:bad-continuation-4chars-3) System codec does not report failure when it should. Should report bug upstream.
PASS   : tst_Utf8::invalidUtf8(localecodec:bad-continuation-4chars-3)
QWARN  : tst_Utf8::invalidUtf8(localecodec:too-short-2chars) System codec does not report failure when it should. Should report bug upstream.
PASS   : tst_Utf8::invalidUtf8(localecodec:too-short-2chars)
QWARN  : tst_Utf8::invalidUtf8(localecodec:too-short-3chars-1) System codec does not report failure when it should. Should report bug upstream.
PASS   : tst_Utf8::invalidUtf8(localecodec:too-short-3chars-1)
QWARN  : tst_Utf8::invalidUtf8(localecodec:too-short-3chars-2) System codec does not report failure when it should. Should report bug upstream.
PASS   : tst_Utf8::invalidUtf8(localecodec:too-short-3chars-2)
QWARN  : tst_Utf8::invalidUtf8(localecodec:too-short-4chars-1) System codec does not report failure when it should. Should report bug upstream.
PASS   : tst_Utf8::invalidUtf8(localecodec:too-short-4chars-1)
QWARN  : tst_Utf8::invalidUtf8(localecodec:too-short-4chars-2) System codec does not report failure when it should. Should report bug upstream.
PASS   : tst_Utf8::invalidUtf8(localecodec:too-short-4chars-2)
QWARN  : tst_Utf8::invalidUtf8(localecodec:too-short-4chars-3) System codec does not report failure when it should. Should report bug upstream.
PASS   : tst_Utf8::invalidUtf8(localecodec:too-short-4chars-3)
QWARN  : tst_Utf8::invalidUtf8(localecodec:hi-surrogate) System codec does not report failure when it should. Should report bug upstream.
PASS   : tst_Utf8::invalidUtf8(localecodec:hi-surrogate)
QWARN  : tst_Utf8::invalidUtf8(localecodec:lo-surrogate) System codec does not report failure when it should. Should report bug upstream.
PASS   : tst_Utf8::invalidUtf8(localecodec:lo-surrogate)
QWARN  : tst_Utf8::invalidUtf8(localecodec:surrogate-pair) System codec does not report failure when it should. Should report bug upstream.
PASS   : tst_Utf8::invalidUtf8(localecodec:surrogate-pair)
QWARN  : tst_Utf8::invalidUtf8(localecodec:non-unicode-1) System codec does not report failure when it should. Should report bug upstream.
PASS   : tst_Utf8::invalidUtf8(localecodec:non-unicode-1)
QWARN  : tst_Utf8::invalidUtf8(localecodec:non-unicode-2) System codec does not report failure when it should. Should report bug upstream.
PASS   : tst_Utf8::invalidUtf8(localecodec:non-unicode-2)
QWARN  : tst_Utf8::invalidUtf8(localecodec:non-unicode-3) System codec does not report failure when it should. Should report bug upstream.
PASS   : tst_Utf8::invalidUtf8(localecodec:non-unicode-3)
QWARN  : tst_Utf8::invalidUtf8(localecodec:non-unicode-4) System codec does not report failure when it should. Should report bug upstream.
PASS   : tst_Utf8::invalidUtf8(localecodec:non-unicode-4)
QWARN  : tst_Utf8::invalidUtf8(localecodec:fe) System codec does not report failure when it should. Should report bug upstream.
PASS   : tst_Utf8::invalidUtf8(localecodec:fe)
QWARN  : tst_Utf8::invalidUtf8(localecodec:fe-bis) System codec does not report failure when it should. Should report bug upstream.
PASS   : tst_Utf8::invalidUtf8(localecodec:fe-bis)
QWARN  : tst_Utf8::invalidUtf8(localecodec:ff) System codec does not report failure when it should. Should report bug upstream.
PASS   : tst_Utf8::invalidUtf8(localecodec:ff)
QWARN  : tst_Utf8::invalidUtf8(localecodec:ff-bis) System codec does not report failure when it should. Should report bug upstream.
PASS   : tst_Utf8::invalidUtf8(localecodec:ff-bis)
QWARN  : tst_Utf8::invalidUtf8(localecodec:overlong-1-2) System codec does not report failure when it should. Should report bug upstream.
PASS   : tst_Utf8::invalidUtf8(localecodec:overlong-1-2)
QWARN  : tst_Utf8::invalidUtf8(localecodec:overlong-1-3) System codec does not report failure when it should. Should report bug upstream.
PASS   : tst_Utf8::invalidUtf8(localecodec:overlong-1-3)
QWARN  : tst_Utf8::invalidUtf8(localecodec:overlong-1-4) System codec does not report failure when it should. Should report bug upstream.
PASS   : tst_Utf8::invalidUtf8(localecodec:overlong-1-4)
QWARN  : tst_Utf8::invalidUtf8(localecodec:overlong-1-5) System codec does not report failure when it should. Should report bug upstream.
PASS   : tst_Utf8::invalidUtf8(localecodec:overlong-1-5)
QWARN  : tst_Utf8::invalidUtf8(localecodec:overlong-1-6) System codec does not report failure when it should. Should report bug upstream.
PASS   : tst_Utf8::invalidUtf8(localecodec:overlong-1-6)
QWARN  : tst_Utf8::invalidUtf8(localecodec:overlong-2-3) System codec does not report failure when it should. Should report bug upstream.
PASS   : tst_Utf8::invalidUtf8(localecodec:overlong-2-3)
QWARN  : tst_Utf8::invalidUtf8(localecodec:overlong-2-4) System codec does not report failure when it should. Should report bug upstream.
PASS   : tst_Utf8::invalidUtf8(localecodec:overlong-2-4)
QWARN  : tst_Utf8::invalidUtf8(localecodec:overlong-2-5) System codec does not report failure when it should. Should report bug upstream.
PASS   : tst_Utf8::invalidUtf8(localecodec:overlong-2-5)
QWARN  : tst_Utf8::invalidUtf8(localecodec:overlong-2-6) System codec does not report failure when it should. Should report bug upstream.
PASS   : tst_Utf8::invalidUtf8(localecodec:overlong-2-6)
QWARN  : tst_Utf8::invalidUtf8(localecodec:overlong-3-4) System codec does not report failure when it should. Should report bug upstream.
PASS   : tst_Utf8::invalidUtf8(localecodec:overlong-3-4)
QWARN  : tst_Utf8::invalidUtf8(localecodec:overlong-3-5) System codec does not report failure when it should. Should report bug upstream.
PASS   : tst_Utf8::invalidUtf8(localecodec:overlong-3-5)
QWARN  : tst_Utf8::invalidUtf8(localecodec:overlong-3-6) System codec does not report failure when it should. Should report bug upstream.
PASS   : tst_Utf8::invalidUtf8(localecodec:overlong-3-6)
QWARN  : tst_Utf8::invalidUtf8(localecodec:overlong-4-5) System codec does not report failure when it should. Should report bug upstream.
PASS   : tst_Utf8::invalidUtf8(localecodec:overlong-4-5)
QWARN  : tst_Utf8::invalidUtf8(localecodec:overlong-4-6) System codec does not report failure when it should. Should report bug upstream.
PASS   : tst_Utf8::invalidUtf8(localecodec:overlong-4-6)
PASS   : tst_Utf8::nonCharacters(utf8codec:fdd0)
PASS   : tst_Utf8::nonCharacters(utf8codec:fdd1)
PASS   : tst_Utf8::nonCharacters(utf8codec:fdd2)
PASS   : tst_Utf8::nonCharacters(utf8codec:fdd3)
PASS   : tst_Utf8::nonCharacters(utf8codec:fdd4)
PASS   : tst_Utf8::nonCharacters(utf8codec:fdd5)
PASS   : tst_Utf8::nonCharacters(utf8codec:fdd6)
PASS   : tst_Utf8::nonCharacters(utf8codec:fdd7)
PASS   : tst_Utf8::nonCharacters(utf8codec:fdd8)
PASS   : tst_Utf8::nonCharacters(utf8codec:fdd9)
PASS   : tst_Utf8::nonCharacters(utf8codec:fdda)
PASS   : tst_Utf8::nonCharacters(utf8codec:fddb)
PASS   : tst_Utf8::nonCharacters(utf8codec:fddc)
PASS   : tst_Utf8::nonCharacters(utf8codec:fddd)
PASS   : tst_Utf8::nonCharacters(utf8codec:fdde)
PASS   : tst_Utf8::nonCharacters(utf8codec:fddf)
PASS   : tst_Utf8::nonCharacters(utf8codec:1fffe)
PASS   : tst_Utf8::nonCharacters(utf8codec:1ffff)
PASS   : tst_Utf8::nonCharacters(utf8codec:2fffe)
PASS   : tst_Utf8::nonCharacters(utf8codec:2ffff)
PASS   : tst_Utf8::nonCharacters(utf8codec:3fffe)
PASS   : tst_Utf8::nonCharacters(utf8codec:3ffff)
PASS   : tst_Utf8::nonCharacters(utf8codec:4fffe)
PASS   : tst_Utf8::nonCharacters(utf8codec:4ffff)
PASS   : tst_Utf8::nonCharacters(utf8codec:5fffe)
PASS   : tst_Utf8::nonCharacters(utf8codec:5ffff)
PASS   : tst_Utf8::nonCharacters(utf8codec:6fffe)
PASS   : tst_Utf8::nonCharacters(utf8codec:6ffff)
PASS   : tst_Utf8::nonCharacters(utf8codec:7fffe)
PASS   : tst_Utf8::nonCharacters(utf8codec:7ffff)
PASS   : tst_Utf8::nonCharacters(utf8codec:8fffe)
PASS   : tst_Utf8::nonCharacters(utf8codec:8ffff)
PASS   : tst_Utf8::nonCharacters(utf8codec:9fffe)
PASS   : tst_Utf8::nonCharacters(utf8codec:9ffff)
PASS   : tst_Utf8::nonCharacters(utf8codec:afffe)
PASS   : tst_Utf8::nonCharacters(utf8codec:affff)
PASS   : tst_Utf8::nonCharacters(utf8codec:bfffe)
PASS   : tst_Utf8::nonCharacters(utf8codec:bffff)
PASS   : tst_Utf8::nonCharacters(utf8codec:cfffe)
PASS   : tst_Utf8::nonCharacters(utf8codec:cffff)
PASS   : tst_Utf8::nonCharacters(utf8codec:dfffe)
PASS   : tst_Utf8::nonCharacters(utf8codec:dffff)
PASS   : tst_Utf8::nonCharacters(utf8codec:efffe)
PASS   : tst_Utf8::nonCharacters(utf8codec:effff)
PASS   : tst_Utf8::nonCharacters(utf8codec:ffffe)
PASS   : tst_Utf8::nonCharacters(utf8codec:fffff)
PASS   : tst_Utf8::nonCharacters(utf8codec:10fffe)
PASS   : tst_Utf8::nonCharacters(utf8codec:10ffff)
PASS   : tst_Utf8::nonCharacters(utf8codec:fffe)
PASS   : tst_Utf8::nonCharacters(utf8codec:ffff)
PASS   : tst_Utf8::nonCharacters(localecodec:fdd0)
PASS   : tst_Utf8::nonCharacters(localecodec:fdd1)
PASS   : tst_Utf8::nonCharacters(localecodec:fdd2)
PASS   : tst_Utf8::nonCharacters(localecodec:fdd3)
PASS   : tst_Utf8::nonCharacters(localecodec:fdd4)
PASS   : tst_Utf8::nonCharacters(localecodec:fdd5)
PASS   : tst_Utf8::nonCharacters(localecodec:fdd6)
PASS   : tst_Utf8::nonCharacters(localecodec:fdd7)
PASS   : tst_Utf8::nonCharacters(localecodec:fdd8)
PASS   : tst_Utf8::nonCharacters(localecodec:fdd9)
PASS   : tst_Utf8::nonCharacters(localecodec:fdda)
PASS   : tst_Utf8::nonCharacters(localecodec:fddb)
PASS   : tst_Utf8::nonCharacters(localecodec:fddc)
PASS   : tst_Utf8::nonCharacters(localecodec:fddd)
PASS   : tst_Utf8::nonCharacters(localecodec:fdde)
PASS   : tst_Utf8::nonCharacters(localecodec:fddf)
PASS   : tst_Utf8::nonCharacters(localecodec:1fffe)
PASS   : tst_Utf8::nonCharacters(localecodec:1ffff)
PASS   : tst_Utf8::nonCharacters(localecodec:2fffe)
PASS   : tst_Utf8::nonCharacters(localecodec:2ffff)
PASS   : tst_Utf8::nonCharacters(localecodec:3fffe)
PASS   : tst_Utf8::nonCharacters(localecodec:3ffff)
PASS   : tst_Utf8::nonCharacters(localecodec:4fffe)
PASS   : tst_Utf8::nonCharacters(localecodec:4ffff)
PASS   : tst_Utf8::nonCharacters(localecodec:5fffe)
PASS   : tst_Utf8::nonCharacters(localecodec:5ffff)
PASS   : tst_Utf8::nonCharacters(localecodec:6fffe)
PASS   : tst_Utf8::nonCharacters(localecodec:6ffff)
PASS   : tst_Utf8::nonCharacters(localecodec:7fffe)
PASS   : tst_Utf8::nonCharacters(localecodec:7ffff)
PASS   : tst_Utf8::nonCharacters(localecodec:8fffe)
PASS   : tst_Utf8::nonCharacters(localecodec:8ffff)
PASS   : tst_Utf8::nonCharacters(localecodec:9fffe)
PASS   : tst_Utf8::nonCharacters(localecodec:9ffff)
PASS   : tst_Utf8::nonCharacters(localecodec:afffe)
PASS   : tst_Utf8::nonCharacters(localecodec:affff)
PASS   : tst_Utf8::nonCharacters(localecodec:bfffe)
PASS   : tst_Utf8::nonCharacters(localecodec:bffff)
PASS   : tst_Utf8::nonCharacters(localecodec:cfffe)
PASS   : tst_Utf8::nonCharacters(localecodec:cffff)
PASS   : tst_Utf8::nonCharacters(localecodec:dfffe)
PASS   : tst_Utf8::nonCharacters(localecodec:dffff)
PASS   : tst_Utf8::nonCharacters(localecodec:efffe)
PASS   : tst_Utf8::nonCharacters(localecodec:effff)
PASS   : tst_Utf8::nonCharacters(localecodec:ffffe)
PASS   : tst_Utf8::nonCharacters(localecodec:fffff)
PASS   : tst_Utf8::nonCharacters(localecodec:10fffe)
PASS   : tst_Utf8::nonCharacters(localecodec:10ffff)
PASS   : tst_Utf8::nonCharacters(localecodec:fffe)
PASS   : tst_Utf8::nonCharacters(localecodec:ffff)
PASS   : tst_Utf8::cleanupTestCase()
Totals: 219 passed, 7 failed, 0 skipped, 0 blacklisted, 32ms
********* Finished testing of tst_Utf8 *********


More information about the Interest mailing list