Skip to main content

Detect a UTF-8-capable locale for running child processes in

[Home | Download | GitLab | PyPI | crates.io | ReadTheDocs]

Overview

Sometimes it is useful for a program to be able to run a child process and more or less depend on its output being valid UTF-8. This can usually be accomplished by setting one or more environment variables, but there is the question of what to set them to - what UTF-8-capable locale is present on this particular system? This is where the utf8_locale module comes in.

Examples

For the Rust implementation:

use std::process;

use utf8_locale;

let utf8env = utf8_locale::Utf8Detect()::new().detect()?;
let cmd = process::Command::new(...).env_clear().envs(utf8_env.env);

For the Python implementation:

import subprocess

import utf8_locale

utf8env = utf8_locale.Utf8Detect().detect()
subprocess.check_output([...], encoding="UTF-8", env=utf8env.env)

Classes (Python and Rust)

LanguagesDetect

The detect() method of this class examines either the provided environment variables or the current process's environment and returns a list of language codes in order of preference that may then be used for determining which UTF-8-capable locale to use.

Utf8Detect

The detect() method of this class runs the external locale command to obtain a list of the supported locale names, and then picks a suitable one to use so that programs are more likely to output valid UTF-8 characters and language-neutral messages. It prefers the C base locale, but if neither C.UTF-8 nor C.utf8 is available, it will fall back to a list of other locale names that are likely to be present on the system. The list of preferred language codes is configurable.

Functions

Note that for the Python and Rust implementation it is recommended to use the Utf8Detect and, if needed, the LanguagesDetect builder classes to perform the detection.

detect_utf8_locale()

The detect_utf8_locale() function runs the external locale command to obtain a list of the supported locale names, and then picks a suitable one to use so that programs are more likely to output valid UTF-8 characters and language-neutral messages. It prefers the C base locale, but if neither C.UTF-8 nor C.utf8 is available, it will fall back to a list of other locale names that are likely to be present on the system.

get_utf8_vars()

The get_utf8_vars() function invokes detect_utf8_locale() and then returns a dictionary/hashmap containing two entries: LC_ALL set to the obtained locale name and LANGUAGE set to an empty string so that recent versions of the gettext library do not choose a different language to output messages in.

get_utf8_env()

The get_utf8_env() function invokes detect_utf8_locale() and then returns a dictionary/hashmap containing the current environment variables, LC_ALL set to the obtained locale name, and LANGUAGE set to an empty string so that recent versions of the gettext library do not choose a different language to output messages in.

get_preferred_languages()

The get_preferred_languages() function examines either the current process environment or the provided dictionary and returns a list of the languages specified in the locale variables (LC_ALL, LANG, LC_MESSAGES, etc). It may be used by programs to add the user's currently preferred locale to their own settings.

Contact

The utf8-locale library was written by Peter Pentchev. It is developed in a GitLab repository. This documentation is hosted at Ringlet with a copy at ReadTheDocs.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

utf8_locale-1.1.0.tar.gz (15.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

utf8_locale-1.1.0-py3-none-any.whl (9.5 kB view details)

Uploaded Python 3

File details

Details for the file utf8_locale-1.1.0.tar.gz.

File metadata

  • Download URL: utf8_locale-1.1.0.tar.gz
  • Upload date:
  • Size: 15.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.6

File hashes

Hashes for utf8_locale-1.1.0.tar.gz
Algorithm Hash digest
SHA256 7ebbb6f2186ddb288bd5a2a7e8e3b774d5c01d9fbc48f39cb9f72bd1f5d99cab
MD5 c52cd570576a006cd7bab48632de7ba6
BLAKE2b-256 678c6ba6883fbd45dfce739498db2024c755d38ea9eccbcc1fac90be4f5ca9fd

See more details on using hashes here.

File details

Details for the file utf8_locale-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: utf8_locale-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 9.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.6

File hashes

Hashes for utf8_locale-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 06075f4990a87fb556a54919130ebd3c3a44a75a34ef91e17ce4f4e121e08d76
MD5 aee0925025f99c4bfad88e398f0298a0
BLAKE2b-256 c883aba48a894fc0be5fc300b201caf508d297f68f8671ceb51bedd7b2c6ad94

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page