ANSI(GB18030): abc���IJ���def[ 61 62 63 d6 d0 ce c4 b2 e2 ca d4 64 65 66 ]: strlen=14
WCHAR: (UNI,10)[ 61 0 62 0 63 0 2d 4e 87 65 4b 6d d5 8b 64 0 65 0 66 0 ]: wcslen=5
UTF-8: abc中文测试def(UTF8,18)[ 61 62 63 e4 b8 ad e6 96 87 e6 b5 8b e8 af 95 64 65 66 ]
以上是C程序执行结果。
代码文件(格式为GB18030,该文件原先在windows系统上创建并完成编写,现在linux上编译),由于Linux终端显示字符集为UTF-8,因此第一行字符串内容可以在windows上正确显示,但在linux终端上不能正确显示,。
下一行为将字符串转码为宽字符集UCS-2LE,转码成功并显示转码了10个字符(10个宽字符,即20个字节),奇怪的是,调用系统库函数wcslen()返回只有5个字符。
第三行为继续将宽字符集转码为UTF-8,此时终端正确显示了10个字符(UTF-8实际占用了18个字节),表明UCS-2LE的转码是正确的。
请教高手,为何wcslen不能返回正确的的宽字符长度?
linux的C库函数wcslen不能正确计算宽字节字符串长度的问题
答案:2 悬赏:10 手机版
解决时间 2021-12-23 21:56
- 提问者网友:十年饮冰
- 2021-12-23 01:37
最佳答案
- 五星知识达人网友:舊物识亽
- 2021-12-23 01:45
我记得linux下一个宽字符占四个字节
全部回答
- 1楼网友:爱难随人意
- 2021-12-23 02:18
你说呢...
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯