5 "三十一"=> 31 "五千九百七十二"=> 5972 我将区域设置设-6ren">
gpt4 book ai didi

c++ - 如何使用 ICU 解析汉字数字字符?

转载 作者:可可西里 更新时间:2023-11-01 18:27:47 30 4
gpt4 key购买 nike

我正在使用 ICU 编写一个函数来解析由汉字数字字符组成的 Unicode 字符串,并希望返回该字符串的整数值。

"五"=> 5
"三十一"=> 31
"五千九百七十二"=> 5972

我将区域设置设置为 Locale::getJapan() 并使用 NumberFormat::parse() 来解析字符串。但是,每当我向它传递任何汉字字符时,parse() 方法都会返回 U_INVALID_FORMAT_ERROR。

有谁知道 ICU 是否支持 NumberFormat::parse() 方法中的 Kanji 字符串?我希望因为我将区域设置设置为日语,所以它能够解析汉字数值。

谢谢!

#include <iostream>
#include <unicode/numfmt.h>

using namespace std;

int main(int argc, char **argv) {
const Locale &jaLocale = Locale::getJapan();
UErrorCode status = U_ZERO_ERROR;
NumberFormat *nf = NumberFormat::createInstance(jaLocale, status);

UChar number[] = {0x4E94}; // Character for '5' in Japanese '五'
UnicodeString numStr(number);
Formattable formattable;
nf->parse(numStr, formattable, status);
if (U_FAILURE(status)) {
cout << "error parsing as number: " << u_errorName(status) << endl;
return(1);
}
cout << "long value: " << formattable.getLong() << endl;
}

最佳答案

您可以使用基于 ICU 规则的数字格式 (RBNF) 模块 rbnf.h (C++) 或对于 C,在带有 UNUM_SPELLOUT 选项的 unum.h 中,两者都使用日语的“ja”语言环境。 Atryom 为您的 C++ 代码提供了更正:new RuleBasedNumberFormat(URBNF_SPELLOUT,jaLocale, status);

关于c++ - 如何使用 ICU 解析汉字数字字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/795868/

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