pypi / charset-normalizer
charset-normalizer
What changed in charset-normalizer 3, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-17.
charset-normalizer 329 changes
Breaking changes 5
Large content with high-entropy noise detector output is no longer decoded, affecting inputs larger than 1M bytes.
Files containing both a charset declaration and BOM/SIG now verify the BOM/SIG charset first.
Removed in favor of feed_info, requiring callers to use the replacement API.
Removed in favor of feed_info, requiring callers to use the replacement API.
Replaces eligible and feed as the preferred API for the flattened logic.
Performance 4
CharsetMatches no longer sort on each match insertion, reducing repeated sorting work.
Cascade codec imports were changed to reduce wall import time.
Measurements no longer use a global cache, reducing RSS memory usage.
Noise and coherence measurements received micro-optimizations.
Behavior and default changes 2
The algorithm no longer uses regex search by default.
Updated using Unicode blocks v17, changing the Unicode range data used by charset detection.
Tooling 4
The Cython upper bound is now <3.4 for native builds; abi3 builds remain capped below 3.3 for Python 3.7 Limited API compatibility.
abi3 wheels are now distributed, reducing the need to rush releases for new Python interpreters.
Optional mypyc builds were replaced with Cython extensions while retaining the pure Python fallback.
Pre-built freethreaded wheels are now shipped in PyPI for freethreaded Python environments.
Fixes and other changes 14
Supported encodings without aliases now resolve correctly and are no longer ignored in charset declarations.
Valid UTF-8 Chinese JSON is no longer incorrectly detected as PTCP154 because of excessive noise penalties for uncommon CJK characters.
Comparisons with non-alias encoding strings were fixed.
Empty payloads now return 0.0 instead of crashing.
Detection of iso2022* cases was corrected by fixing multibyte chunking logic.
Explicit support for Python 3.15 was added.
Fixed a regression in the fallback path that could lead to a decode error.
Inverse capitalization is now recognized by the noise detector.
The redundant UTF7 BOM marker was removed.
Correctly removes the SIG remnant from utf-7 decoded strings.
Fixed an edge case where noise differences between candidates could be almost insignificant.
Fixed writing to the wrong path when normalizing multiple files.
Passing a bytearray to from_bytes no longer raises TypeError.
Logger levels are restored correctly when processing empty byte sequences.