加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 03:46:58 所属栏目:百科 来源:网络整理
导读:我正在编写一个函数,使用ICU来解析由汉字数字字符组成的Unicode字符串,并希望返回字符串的整数值. “五”=五 “三十一”= 31 “五千九百七十二”= 5972 我将语言环境设置为Locale :: getJapan()并使用NumberFormat :: parse()来解析字符串.但是,每当我传递任
我正在编写一个函数,使用ICU来解析由汉字数字字符组成的Unicode字符串,并希望返回字符串的整数值.

“五”=>五
“三十一”=> 31
“五千九百七十二”=> 5972

我将语言环境设置为Locale :: getJapan()并使用NumberFormat :: parse()来解析字符串.但是,每当我传递任何汉字字符时,parse()方法返回U_INVALID_FORMAT_ERROR.

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

谢谢!

#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.h中使用UNUM_SPELLOUT选项,两者都使用日语的“ja”语言环境. Atryom为您的代码提供了对C:new RuleBasedNumberFormat(URBNF_SPELLOUT,jaLocale,status)的更正;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读