gpt4 book ai didi

c++ - 使用 boost::locale 进行 Unicode 字符分类

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:41:54 28 4
gpt4 key购买 nike

作为字符分类的标准函数,来自 <cctype><locale>不能像 UTF-8 这样的多字节字符编码,因此必须求助于其他实现。一个合适的库可能是 Boost.Locale(可能以 ICU 作为其后端)。不幸的是,我找不到如何通过代码点或字形迭代 UTF-8 编码的字符串代码点并将其分类为例如大小写、空格等

有过类似的问题没有满意的答案:

但是,正如其他答案所建议的那样,ICU 中有低级功能:

Q1:考虑到迭代 UTF-8 编码字符串并将每个字符分类为大写或小写或空格的简单任务。如何使用 Boost.Locale 在 C++ 中实现它?

Q2:如果 Boost.Locale 做不到但 ICU 可以。如何使用 Boost.Locale 获得合适的值以传递给 ICU 的分类函数? ICU 通常取一个 int32_t。如何通过 Boost.Locale 从 UTF-8 字符串中获取它?

Q3:Boost.Locale 对UTF-8 字符串进行操作的函数通常也将语言环境作为参数。如果我不知道字符串包含哪种语言,如何传递该参数?例如。字符串可以包含独立于语言环境的英文或中文文本。 UTF-8 不定义类似 WSpace 的属性吗?独立于任何语言环境?那么,只要是 UTF-8 语言环境,我提供的语言环境有什么关系吗?

目标平台是 Windows。编译器是 Visual Studio 2015。

最佳答案

Locale 包含很多本地化的东西,不仅仅是编码,例如:数据/时间格式、数字表示。

A1。为什么语言环境要提供字符分类?你能把中国包机/日本包机分类吗?

A2。不确定你在问什么,你可以直接调用 ICU。

A3。 UTF-8 是一种编码,而不是语言环境。有专门的语言环境,如 en_US.UTF-8、zh_CN.UTF-8 等。所有这些语言环境都使用 UTF-8 对字符进行编码。您不需要知道字符串区域设置,UTF-8 能够对所有 unicode 字符进行编码。 Unicode 应用程序能够显示所有 unicode 字形,无论是中文、日文还是泰文。

顺便说一句,boost 正则表达式提供了一个 utf8 字形迭代器 http://www.boost.org/doc/libs/1_66_0/libs/regex/doc/html/boost_regex/ref/internals/uni_iter.html

并且,确保始终使用 Unicode 字符串,使用 Unicode API 并避免使用 Windows MBCS 编码。

关于c++ - 使用 boost::locale 进行 Unicode 字符分类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48207864/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com