5 个版本 (3 个稳定)
1.0.3 | 2024年2月27日 |
---|---|
1.0.1 | 2023年6月29日 |
1.0.0 | 2022年10月22日 |
0.3.0 | 2022年2月23日 |
0.2.0 | 2022年2月1日 |
在 命令行工具 中排名第 602
每月下载量 54
70KB
1.5K SLoC
检测用于运行子进程的 UTF-8 兼容的区域设置
[主页 | 下载 | GitLab | PyPI | crates.io | ReadTheDocs]
概述
有时,一个程序能够运行子进程并依赖其输出为有效的 UTF-8,这很有用。这通常可以通过设置一个或多个环境变量来实现,但问题是设置什么值——系统上存在哪些 UTF-8 兼容的区域设置?这正是 utf8_locale
模块的作用所在。
示例
Rust 实现示例
use std::process;
use utf8_locale;
let utf8env = utf8_locale::Utf8Detect()::new().detect()?;
let cmd = process::Command::new(...).env_clear().envs(utf8_env.env);
Python 实现示例
import subprocess
import utf8_locale
utf8env = utf8_locale.Utf8Detect().detect()
subprocess.check_output([...], encoding="UTF-8", env=utf8env.env)
类(Python 和 Rust)
LanguageDetect
该类的 detect()
方法检查提供的环境变量或当前进程的环境,并返回一个优先级顺序的语言代码列表,然后可以用来确定要使用哪个 UTF-8 兼容的区域设置。
Utf8Detect
该类的 detect()
方法运行外部 locale
命令以获取支持的区域设置名称列表,然后选择一个合适的名称使用,以便程序更有可能输出有效的 UTF-8 字符和语言中性的消息。它优先使用 C
基础区域设置,但如果既没有 C.UTF-8
也没有 C.utf8
,它将回退到系统上可能存在的其他区域设置名称列表。首选语言代码列表是可以配置的。
函数
请注意,对于 Python 和 Rust 实现,建议使用 Utf8Detect
和,如果需要,LanguagesDetect
构建器类来进行检测。
detect_utf8_locale()
detect_utf8_locale()
函数运行外部 locale
命令以获取支持的区域设置名称列表,然后选择一个合适的名称使用,以便程序更有可能输出有效的 UTF-8 字符和语言中性的消息。它优先使用 C
基础区域设置,但如果既没有 C.UTF-8
也没有 C.utf8
,它将回退到系统上可能存在的其他区域设置名称列表。
get_utf8_vars()
get_utf8_vars()
函数调用 detect_utf8_locale()
,然后返回一个包含两个条目的字典/哈希表:将 LC_ALL
设置为获取到的区域设置名称,将 LANGUAGE
设置为空字符串,以便较新版本的 gettext 库不会选择不同的语言来输出消息。
get_utf8_env()
get_utf8_env()
函数调用 detect_utf8_locale()
,然后返回一个包含当前环境变量的字典/哈希表,将 LC_ALL
设置为获取到的区域设置名称,将 LANGUAGE
设置为空字符串,以便较新版本的 gettext 库不会选择不同的语言来输出消息。
get_preferred_languages()
get_preferred_languages()
函数检查当前进程环境或提供的字典,并返回包含在区域设置变量(LC_ALL
、LANG
、LC_MESSAGES
等)中的语言列表。程序可以使用它来将其用户当前首选的区域设置添加到自己的设置中。
联系
由 Peter Pentchev 编写了 feature-check
库。它在 GitLab 仓库 中开发。此文档托管在 Ringlet 上,在 ReadTheDocs 上有副本。
依赖
~6.5MB
~107K SLoC