python-idna
Port variant v13
Summary Int. Domain Names in Applications (3.13)
Package version 3.17
Homepage https://github.com/kjd/idna
Keywords python
Maintainer Python Automaton
License Not yet specified
Other variants v14
Ravenports Buildsheet | History
Ravensource Port Directory | History
Last modified 29 MAY 2026, 12:33:39 UTC
Port created 30 MAY 2017, 20:17:50 UTC
Subpackage Descriptions
single # Internationalized Domain Names in Applications (IDNA) Support for [Internationalized Domain Names in Applications (IDNA)] and [Unicode IDNA Compatibility Processing]. It supersedes the standard library's `encodings.idna`, which only implements the 2003 specification, offering broader script coverage and limiting domains with known security vulnerabilities. ## Usage Package may be installed from [PyPI] via the typical methods (e.g. `python3 -m pip install idna`) For typical usage, the `encode` and `decode` functions will take a domain name argument and perform a conversion to ASCII-compatible encoding (known as A-labels), or to Unicode strings (known as U-labels) respectively. ```pycon >>> import idna >>> idna.encode('ドメイン.テスト') b'xn--eckwd4c7c.xn--zckzah' >>> print(idna.decode('xn--eckwd4c7c.xn--zckzah')) ドメイン.テスト ``` Conversions can be applied at a per-label basis using the `ulabel` or `alabel` functions for specialized use cases. ### Compatibility Mapping (UTS #46) This library provides support for [Unicode IDNA Compatibility Processing] which normalizes input from different potential ways a user may input a domain prior to performing the IDNA conversion operations. This functionality, known as a [mapping], is considered by the specification to be a local user-interface issue distinct from IDNA conversion functionality. For example, "Königsgäßchen" is not a permissible label as capital letters are not allowed. UTS 46 will convert this into lower case prior to applying the IDNA conversion. ```pycon >>> import idna >>> idna.encode('Königsgäßchen') ... idna.core.InvalidCodepoint: Codepoint U+004B at position 1 of 'Königsgäßchen' not allowed >>> idna.encode('Königsgäßchen', uts46=True) b'xn--knigsgchen-b4a3dun' >>> idna.decode('xn--knigsgchen-b4a3dun') 'königsgäßchen' ``` ## Exceptions All errors raised during conversion derive from the `idna.IDNAError` base class. The more specific exceptions are: * `idna.IDNABidiError` — raised when a label contains an illegal combination of left-to-right and right-to-left characters. * `idna.InvalidCodepoint` — raised when a label contains a codepoint that is INVALID for IDNA. * `idna.InvalidCodepointContext` — raised when a CONTEXTO or CONTEXTJ codepoint appears in a position whose contextual requirements are not satisfied. ## Command-line tool The package supports command-line usage to convert domain names between their Unicode and ASCII-compatible forms. It can be run either as a module (`python3 -m idna`) or, once installed (such as with `uv tool` or `pipx`), via the `idna` script: ```bash $ uv tool install idna $ idna xn--e1afmkfd.xn--p1ai пример.рф $ idna пример.рф xn--e1afmkfd.xn--p1ai ``` With no mode flag the direction is chosen automatically: inputs containing an `xn--` label are decoded, anything else is encoded. Pass `-e`/`--encode` or `-d`/`--decode` to force a specific direction. Multiple domains may be supplied at once, either as positional arguments or by piping one domain per line on standard input. When more than one domain is supplied without explicitly asking to encode or decode, the direction is picked from the first input and that mode is applied to every remaining input. Use `-e`/`--encode` or `-d`/`--decode` to override the heuristic if the first input is ambiguous. UTS #46 mapping is applied by default, which lets the tool accept inputs that aren't strictly valid IDNA 2008 by normalising them first:
Configuration Switches (platform-specific settings discarded)
PY313 ON Build using Python 3.13 PY314 OFF Build using Python 3.14
Package Dependencies by Type
Build (only) python313:dev:std
python-pip:single:v13
autoselect-python:single:std
Build and Runtime python313:primary:std
Download groups
main mirror://PYPIWHL/de/a7/f76514cc40ad6234098ecdebda08732d75964776c51a42845b7da10649e2
Distribution File Information
466e48829084efe2548012b855df21540b96f2e20e51bd124c851536556a592c 65316 python-src/idna-3.17-py3-none-any.whl
Ports that require python-idna:v13
python-anyio:v13 Layer built on asyncio or trio libraries (3.13)
python-httpx:v13 Next generation HTTP client (3.13)
python-hyperlink:v13 Featureful, immutable, and correct URL (3.13)
python-requests:v13 Python HTTP for Humans (3.13)
python-url-normalize:v13 URL normalization for Python (3.13)
python-yarl:v13 Yet another URL library (3.13)