Different QLocale.decimalPoint values, little-endian (amd64, arm64, etc) vs. big-endian (s390x)
Dmitry Shachnev
mitya57 at ubuntu.com
Fri May 23 13:38:38 BST 2025
Hi Phil!
On Fri, May 23, 2025 at 11:51:53AM +0100, Phil Thompson wrote:
> In fact it may be more likely that it's the arguments to the QLocale ctor
> that are the problem. So the outputs of...
>
> print(QLocale.Language.Dutch.value)
> print(QLocale.Script.LatinScript.value)
> print(QLocale.Country.Netherlands.value)
>
> ...would also be interesting.
They are the same on both systems, and match the definition in qlocale.h:
>>> print(QLocale.Language.Dutch.value)
72
>>> print(QLocale.Script.LatinScript.value)
66
>>> print(QLocale.Country.Netherlands.value)
165
On Fri, May 23, 2025 at 11:40:52AM +0100, Phil Thompson wrote:
> What about other QLocale calls that return a QString (eg.
> nativeLanguageName())?
This is much more interesting. On amd64:
>>> l = QLocale(QLocale.Language.Dutch)
>>> l.language()
<Language.Dutch: 72>
>>> l.name()
'nl_NL'
>>> l.nativeLanguageName()
'Nederlands'
On s390x:
>>> l = QLocale(QLocale.Language.Dutch)
>>> l.language()
<Language.English: 75>
>>> l.name()
'en_US'
>>> l.nativeLanguageName()
'American English'
And I think I have a hypothesis. Qt defines the enums as ushort since Qt 6:
https://code.qt.io/cgit/qt/qtbase.git/commit?id=8b0e068847c03c58f510f89c85dcc7a5e4ac7ef4
However qlocale.sip does not do that. And if we pass a 4-bytes int, on big
endian systems the code will read from the first two bytes which are zeroes,
and that gets interpreted as AnyLanguage.
Can I add ": ushort" to qlocale.sip to give it a try, or the syntax is
different?
--
Dmitry Shachnev
More information about the PyQt
mailing list