You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
unicodedata: is_normalized claims nothing is normalized in any form when using the 3.2.0 database #101372
3.8 adds the .is_normalized function to the unicodedata module, which also is available as a method on the legacy unicodedata.ucd_3_2_0 database. It is supposed to check whether a string is equal to its normalization in a given form, but without having to normalize and compare.
However, the legacy version does not maintain the expected invariant. In fact, it reports that every single-character string is not normalized, regardless of the normalization form chosen. Presumably, the result is the same for every non-empty string. (It appears that the empty string works because it is special-cased at line 871-874.)
Example:
>>> import unicodedata
>>> unicodedata.ucd_3_2_0.normalize('NFC', '!') == '!'
True
>>> unicodedata.ucd_3_2_0.is_normalized('NFC', '!')
False
>>> any(unicodedata.ucd_3_2_0.is_normalized(form, chr(x)) for form in ('NFC', 'NFD', 'NFKC', 'NFKD') for x in range(0x110000))
False
/* UCD 3.2.0 is requested, quickchecks must be disabled. */
if (UCD_Check(self)) {
return NO;
}
I believe the NO should say MAYBE instead. The NO value appears to indicate that the quickcheck has determined that the string is not normalized - contrary to both the comment and expected behaviour.
Your environment
$ python
Python 3.8.10 (default, Nov 14 2022, 12:59:47)
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
changed the title [-]is_normalized claims nothing is normalized in any form when using the 3.2.0 database[/-][+]unicodedata: is_normalized claims nothing is normalized in any form when using the 3.2.0 database[/+]on Jan 27, 2023
Activity
[-]is_normalized claims nothing is normalized in any form when using the 3.2.0 database[/-][+]unicodedata: is_normalized claims nothing is normalized in any form when using the 3.2.0 database[/+]pythongh-101372: Fix unicodedata.is_normalized to properly handle the…
gh-101372: Fix unicodedata.is_normalized to properly handle the UCD 3… (
pythongh-101372: Fix unicodedata.is_normalized to properly handle the…
pythongh-101372: Fix unicodedata.is_normalized to properly handle the…
gh-101372: Fix unicodedata.is_normalized to properly handle the UCD 3… (
gh-101372: Fix unicodedata.is_normalized to properly handle the UCD 3… (
hauntsaninja commentedon Feb 25, 2023
Thanks for the report and the fix!
Serhiy mentioned he wanted to write tests here #101388 (comment) so leaving this issue open
hugovk commentedon Nov 10, 2023
(@serhiy-storchaka ping about the tests, if it's still relevant)
serhiy-storchaka commentedon Dec 14, 2025
Sorry for delay, the tests will be added in #142681.