Ixa*_*zis 8 c++ string boost locale
再一个简单的问题是:有一个std::string,确定哪个字符是关于用户的语言和区域设置(区域设置)的数字,符号,空格等.
我设法使用boost locale边界分析工具将字符串拆分为一组字符:
std::string text = u8"???????";
boost::locale::boundary::segment_index<std::string::const_iterator> characters(
boost::locale::boundary::character,
text.begin(), text.end(),
boost::locale::generator()("ja_JP.UTF-8"));
for (const auto& ch : characters) {
// each 'ch' is a single character in japanese language
}
Run Code Online (Sandbox Code Playgroud)
但是,我还没有看到任何方法来确定ch是数字还是符号或其他任何东西.有提升字符串分类算法,但这些似乎不适用..无论*segment_index::iterator是什么.
我也不能申请std::isalpha(std::locale),因为我不确定是否有可能将增强段转换为char或wchar_t.
有没有什么简洁的方法来分类符号?
有许多函数和对象支持此功能,
<locale>但是...您给出的示例文本看起来像 UTF-8,它是一种多字节编码,并且 中的函数<locale>
不适用于多字节编码。
我建议你获取 ICU 库并使用它。除此之外,它还允许测试 Unicode 字符数据库中定义的所有属性。它还具有用于迭代字符串(或至少一个数组char)的宏或函数,一次提取一个 UTF_32 代码点(这就是您想要测试的内容)。