#utf-8 #locale #subprocess #子进程 #环境变量

bin+lib utf8-locale

检测用于运行子进程的 UTF-8 兼容的区域设置

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

Download history 1/week @ 2024-03-15 19/week @ 2024-03-29 1/week @ 2024-04-05 2/week @ 2024-04-12

每月下载量 54

BSD-2-Clause 许可协议

70KB
1.5K SLoC

Rust 498 SLoC // 0.0% comments Python 484 SLoC // 0.2% comments C 473 SLoC // 0.0% comments INI 97 SLoC // 0.0% comments Shell 84 SLoC // 0.2% comments

检测用于运行子进程的 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_ALLLANGLC_MESSAGES 等)中的语言列表。程序可以使用它来将其用户当前首选的区域设置添加到自己的设置中。

联系

Peter Pentchev 编写了 feature-check 库。它在 GitLab 仓库 中开发。此文档托管在 Ringlet 上,在 ReadTheDocs 上有副本。

依赖

~6.5MB
~107K SLoC