永发信息网

大神们,AIX下,如何用C实现UTF8的中文转成ASCII

答案:1  悬赏:20  手机版
解决时间 2021-03-17 01:25
大神们,AIX下,如何用C实现UTF8的中文转成ASCII
最佳答案
用MultiByteToWideChar和WideCharToMultiByte可以做到编码的转换。
MultiByteToWideChar是一个windows API 函数,该函数映射一个字符串到一个宽字符(unicode)的字符串。
函数原型:int MultiByteToWideChar(UINT CodePage,DWORD dwFlags,LPCSTR lpMultiByteStr,int cchMultiByte,LPWSTR lpWideCharStr,int cchWideChar);
参数:CodePage:指定执行转换的字符集,这个参数可以为系统已安装或有效的任何字符集所给定的值。你也可以指定其为下面的任意一值:CP_ACP:ANSI字符集;CP_MACCP:Macintosh代码页;CP_OEMCP:OEM代码页;CP_SYMBOL:符号字符集(42);CP_THREAD_ACP:当前线程ANSI代码页;CP_UTF7:使用UTF-7转换;CP_UTF8:使用UTF-8转换。dwFlags:一组位标记用以指出是否未转换成预作或宽字符(若组合形式存在),是否使用象形文字替代控制字符,以及如何处理无效字符。你可以指定下面是标记常量的组合,含义如下:MB_PRECOMPOSED:通常使用预作字符——就是说,由一个基本字符和一个非空字符组成的字符只有一个单一的字符值。这是缺省的转换选择。不能与MB_COMPOSITE值一起使用。MB_COMPOSITE:通常使用组合字符——就是说,由一个基本字符和一个非空字符组成的字符分别有不同的字符值。不能与MB_PRECOMPOSED值一起使用。MB_ERR_INVALID_CHARS:如果函数遇到无效的输入字符,它将运行失败,且GetLastErro返回ERROR_NO_UNICODE_TRANSLATION值。MB_USEGLYPHCHARS:使用象形文字替代控制字符。组合字符由一个基础字符和一个非空字符构成,每一个都有不同的字符值。每个预作字符都有单一的字符值给基础/非空字符的组成。在字符è中,e就是基础字符,而重音符标记就是非空字符。函数的缺省动作是转换成预作的形式。如果预作的形式不存在,函数将尝试转换成组合形式。标记MB_PRECOMPOSED和MB_COMPOSITE是互斥的,而标记MB_USEGLYPHCHARS和MB_ERR_INVALID_CHARS则不管其它标记如何都可以设置。lpMultiByteStr:指向将被转换字符串的字符。cchMultiByte:指定由参数lpMultiByteStr指向的字符串中字节的个数。如果lpMultiByteStr指定的字符串以空字符终止,可以设置为-1(如果字符串不是以空字符中止,设置为-1可能失败,可能成功),此参数设置为0函数将失败。lpWideCharStr:指向接收被转换字符串的缓冲区。cchWideChar:指定由参数lpWideCharStr指向的缓冲区的宽字符个数。若此值为零,函数返回缓冲区所必需的宽字符数,在这种情况下,lpWideCharStr中的缓冲区不被使用。
返回值:如果函数运行成功,并且cchWideChar不为零,返回值是由lpWideCharStr指向的缓冲区中写入的宽字符数;如果函数运行成功,并且cchWideChar为零,返回值是接收到待转换字符串的缓冲区所需求的宽字符数大小。如果函数运行失败,返回值为零。若想获得更多错误信息,请调用GetLastError函数。它可以返回下面所列错误代码:ERROR_INSUFFICIENT_BUFFER;ERROR_INVALID_FLAGS;ERROR_INVALID_PARAMETER;ERROR_NO_UNICODE_TRANSLATION。
WideCharToMultiByte,该函数映射一个unicode字符串到一个多字节字符串。函数原型:int WideCharToMultiByte(UINT CodePage, //指定执行转换的代码页DWORD dwFlags, //允许你进行额外的控制,它会影响使用了读音符号(比如重音)的字符LPCWSTR lpWideCharStr, //指定要转换为宽字节字符串的缓冲区int cchWideChar, //指定由参数lpWideCharStr指向的缓冲区的字符个数LPSTR lpMultiByteStr, //指向接收被转换字符串的缓冲区int cchMultiByte, //指定由参数lpMultiByteStr指向的缓冲区最大值LPCSTR lpDefaultChar, //遇到一个不能转换的宽字符,函数便会使用pDefaultChar参数指向的字符LPBOOL pfUsedDefaultChar //至少有一个字符不能转换为其多字节形式,函数就会把这个变量设为TRUE);参数:CodePage:指定执行转换的代码页,这个参数可以为系统已安装或有效的任何代码页所给定的值。你也可以指定其为下面的任意一值:CP_ACP:ANSI代码页;CP_MACCP:Macintosh代码页;CP_OEMCP:OEM代码页;CP_SYMBOL:符号代码页(42);CP_THREAD_ACP:当前线程ANSI代码页;CP_UTF7:使用UTF-7转换;CP_UTF8:使用UTF-8转换返回值:如果函数运行成功,并且cchMultiByte不为零,返回值是由 lpMultiByteStr指向的缓冲区中写入的字节数;如果函数运行成功,并且cchMultiByte为零,返回值是接收到待转换字符串的缓冲区所必需的字节数。如果函数运行失败,返回值为零。若想获得更多错误信息,请调用GetLastError函数。它可以返回下面所列错误代码:ERROR_INSUFFICIENT_BJFFER;ERROR_INVALID_FLAGS;ERROR_INVALID_PARAMETER;ERROR_NO_UNICODE_TRANSLATION。注意:指针lpMultiByteStr和lpWideCharStr必须不一样。如果一样,函数将失败,GetLastError将返回ERROR_INVALID_PARAMETER的值。 Windows CE:不支持参数CodePage中的CP_UTF7和CP_UTF8的值,以及参数dwFlags中的WC_NO_BEST_FIT_CHARS值。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
“我正盼望着收到你的来信”用英语怎么说?
亲戚想借身份证买房 我会有什么风险?
关于速度的定义
我上班时间是十二点到八点半,在化妆品店上班
和福客栈怎么去啊,有知道地址的么
伊苏起源打开专用修改器后无法进入游戏?用的
网对岙地址在什么地方,想过去办事
风三少的剑的txt全集下载地址
地下城与勇士 修罗削肉6换装有用吗
春秋夏冬四个季节诗
佰分百·国际美发连锁佰分百裕丰店怎么去啊,
买了台海尔电视机,送了台样机过来怎么办?
新破天一剑里怎么自动攻击
预付的房间被拒绝了,预付款能退么?大概多久
这种草用没有毒,它头上的刺刺把我脚踝刺破了
推荐资讯
开学两周,班主任老师今天对我说,这两周的学
"长期待摊费用“怎么摊销?摊销年限为几年?
联想手机怎么不能拨打电话 但是可以接听
阳光窗帘NO.2地址在哪,我要去那里办事
根据关节的模式图回答下列问题(1)运动中能
食苑这个地址在什么地方,我要处理点事
好的烟和差的烟有什么不同吗?
地球上最大的动物是什么?
手表进水起雾该怎么处理
怎么把多个MP3歌曲做成一个MP4视频
现在到底还有没有温柔的女孩
android程序在平板上显示异常
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?