Repository navigation
Releases
Releases ยท jawah/charset_normalizer
Version 3.5.2
3.5.2 (2026-09-29)
Changed
- Raised the Cython upper bound to
<3.4for native builds. The bound remains<3.3for
abi3builds to preserve compatibility with the Python 3.7 Limited API.
Fixed
Version 3.5.1
Version 3.5.0
3.5.0 (2026-08-12)
Added
- Explicit support for Python 3.15
Fixed
- Comparing a CharsetMatch to a non-alias encoding strings (#773)
- Return 0.0 CharsetMatch.multi_byte_usage for empty payloads instead of crashing (#774)
- A file with both a charset declaration and BOM/SIG did not verify first the BOM/SIG charset.
- iso2022* cases misdetected due to a flaw in our multibyte chunking logic.
Changed
- Replaced the optional mypyc build with Cython extensions while retaining the
pure Python fallback. The previous engine (mypyc) started to hit rough limit around
the optimization of our noise/coherence detector while Cython allows us to
steer the engine toward the right generated optimized sources.
This change SHOULD not impact bundler (e.g. Pyinstaller) as the module are
immediately discoverable (i.e. not hidden import like mypyc did).
Moreover, a long wished distribution is the abi3 wheels, this will allow us
to no longer rush each year when a new Python interpreter is released.
We still distribute the interpreter specific wheels for faster performance. - Applied micro-optimization on several utils.
- CharsetMatches no longer sort on each match insertion.
Misc
- Removed an old performance optimization attempt in apy.py (success_fast_tracked+payload_result_cache).
Version 3.4.9
Version 3.4.8
3.4.8 (2026-07-06)
Fixed
- Wall import time due to cascade codec imports for our multibyte first sort of iana supported codecs (#742)
- Unnecessary json import at runtime (#753)
- Inverse capitalization not seen by noise detector (#731)
Changed
- No longer holding a global cache for our noise / coherence measurements. Relax RSS memory usage.
- Micro-optimizations in our noise / coherence measurements.
- No longer using regex search by default for our preemptive charset mark algorithm.
- Raised upperbound of setuptools to v83.
- Raised upperbound of mypy(c) to v2.1.
Removed
- Redundant UTF7 BOM marker (#730)
Version 3.4.7
Version 3.4.6
3.4.6 (2026-03-15)
Changed
- Flattened the logic in
charset_normalizer.mdfor higher performance. Removedeligible(..)andfeed(...)
in favor offeed_info(...). - Raised upper bound for mypy[c] to 1.20, for our optimized version.
- Updated
UNICODE_RANGES_COMBINEDusing Unicode blocks v17.
Fixed
- Edge case where noise difference between two candidates can be almost insignificant. (#672)
- CLI
--normalizewriting to wrong path when passing multiple files in. (#702)
Misc
- Freethreaded pre-built wheels now shipped in PyPI starting with 3.14t. (#616)
Version 3.4.5
3.4.5 (2026-03-06)
Changed
- Update
setuptoolsconstraint tosetuptools>=68,<=82. - Raised upper bound of mypyc for the optional pre-built extension to v1.19.1
Fixed
- Add explicit link to lib math in our optimized build. (#692)
- Logger level not restored correctly for empty byte sequences. (#701)
- TypeError when passing bytearray to from_bytes. (#703)
Misc
- Applied safe micro-optimizations in both our noise detector and language detector.
- Rewrote the
query_yes_nofunction (inside CLI) to avoid using ambiguous licensed code. - Added
cd.pysubmodule into mypyc optional compilation to reduce further the performance impact.
Warning
mypyc changed the usual binary output for the optimized wheel. Beware, especially if using PyInstaller or alike. See #714
Version 3.4.4
3.4.4 (2025-10-13)
Changed
- Bound
setuptoolsto a specific constraintsetuptools>=68,<=81. - Raised upper bound of mypyc for the optional pre-built extension to v1.18.2
Removed
setuptools-scmas a build dependency.
Misc
- Enforced hashes in
dev-requirements.txtand createdci-requirements.txtfor security purposes. - Additional pre-built wheels for riscv64, s390x, and armv7l architectures.
- Restore
multiple.intoto.jsonlin GitHub releases in addition to individual attestation file per wheel.
Version 3.4.3
3.4.3 (2025-08-09)
Changed
- mypy(c) is no longer a required dependency at build time if
CHARSET_NORMALIZER_USE_MYPYCisn't set to1. (#595) (#583) - automatically lower confidence on small bytes samples that are not Unicode in
detectoutput legacy function. (#391)
Added
- Custom build backend to overcome inability to mark mypy as an optional dependency in the build phase.
- Support for Python 3.14
Fixed
- sdist archive contained useless directories.
- automatically fallback on valid UTF-16 or UTF-32 even if the md says it's noisy. (#633)
Misc
- SBOM are automatically published to the relevant GitHub release to comply with regulatory changes.
Each published wheel comes with its SBOM. We choose CycloneDX as the format. - Prebuilt optimized wheel are no longer distributed by default for CPython 3.7 due to a change in cibuildwheel.