#locale #charset

locale_name_code_page

Rust 库,帮助我们获取 Windows 中使用的代码页(然后是旧编码)

1 个不稳定版本

0.1.0 2020年9月13日

#1722编码


2 个包中使用(通过 zifu_core

MIT 许可证

745KB
531

Rust 的地区名称到代码页

CI (master) CI (Release) locale_name_code_page at crates.io locale_name_code_page at docs.rs Downloads (Crates.io) License (Crates.io)

这是一个将表示地区名称的字符串转换为 Windows 中使用的代码页的库。

例如:

  • en-US 地区设置中,Windows-1252(代码页 ID:1252)用作 ANSI 代码页,CP437(代码页 ID:437)用作 OEM 代码页。
  • ja-JP 地区设置中,Shift_JIS(代码页 ID:932)用作 ANSI 和 OEM 代码页。

用法

首先,将 locale_name_code_page = "<2" 添加到您的 Cargo.toml

[dependencies]
# *snip*
locale_name_code_page = "<2"
# *snip*

然后,将表示地区的字符串转换为代码页,如下所示

use locale_name_code_page::get_codepage;
use locale_name_code_page::cp_table_type::CodePage;

// IConverter has already been defined by you
fn get_converter_instance(codepage: &CodePage) -> Box<dyn IConverter> {
  // do something
  return Box::new(converter);
}

// *snip*

fn main() {
  // *snip*
  if let Some(codepage_ref) = get_codepage(locale_string) {
    let converter = get_converter_instance(codepage_ref);
    // *snip*
  } else {
    eprintln!("Error: {} doesn't represent a valid locale.", locale_string);
    std::process::exit(1);
  }
}

获取到的代码页(locale_name_code_page::cp_table_type::CodePage 的实例)可以如下使用

use locale_name_code_page::get_codepage;

fn main() {
  let en_cp = get_codepage("en-US").unwrap();
  // prints "en-US locale: 1252 (ANSI) / 437 (OEM)"
  println!("en-US locale: {} (ANSI) / {} (OEM)", en_cp.ansi, en_cp.oem);
}

信息来源

https://web.archive.org/web/20180104073254/https://www.microsoft.com/resources/msdn/goglobal/default.mspx

常见问题解答

如何将代码页转换为编码器/解码器?

使用以下库

ANSI 编码(包括 CJKV 语言)

codepageencoding_rs 结合使用。

OEM 编码(除了 CJKV 语言)

使用 oem_cp

如何获取当前地区?

使用 locale_config

我想将此库移植到其他语言。

您可以在您的自动代码生成脚本中使用 assets/nls_info.json

许可证

MIT

依赖项

~2.2–3MB
~56K SLoC