diff options
Diffstat (limited to 'src/corelib/text/qlocale_p.h')
-rw-r--r-- | src/corelib/text/qlocale_p.h | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/src/corelib/text/qlocale_p.h b/src/corelib/text/qlocale_p.h index 818fdf27a1..d822f86b72 100644 --- a/src/corelib/text/qlocale_p.h +++ b/src/corelib/text/qlocale_p.h @@ -463,14 +463,22 @@ inline char QLocaleData::numericToCLocale(QStringView in) const if ((group == u"\xa0" || group == u"\x202f") && in == u" ") return ','; - const uint zeroUcs4 = zeroUcs(); - const uint tenUcs4 = zeroUcs4 + 10; const uint inUcs4 = in.size() == 2 ? QChar::surrogateToUcs4(in.at(0), in.at(1)) : in.at(0).unicode(); - - if (zeroUcs4 <= inUcs4 && inUcs4 < tenUcs4) - return '0' + inUcs4 - zeroUcs4; - + const uint zeroUcs4 = zeroUcs(); + // Must match qlocale_tools.h's unicodeForDigit() + if (zeroUcs4 == 0x3007u) { + // QTBUG-85409: Suzhou's digits aren't contiguous ! + if (inUcs4 == zeroUcs4) + return '0'; + if (inUcs4 > 0x3020u && inUcs4 <= 0x3029u) + return inUcs4 - 0x3020u; + } else { + const uint tenUcs4 = zeroUcs4 + 10; + + if (zeroUcs4 <= inUcs4 && inUcs4 < tenUcs4) + return '0' + inUcs4 - zeroUcs4; + } if ('0' <= inUcs4 && inUcs4 <= '9') return inUcs4; |