[问题] C语言--输出中文字符阵列中单一字符的问

楼主: skyHuan (Huan)   2017-11-03 14:49:21
遇到的问题:
(1) string中含2bytes的中文字符及1byte的空格字符要如何计算strlen
(2) 2bytes的中文字符string中要如何输出单一字符(一般string中的string[0])
问题详细描述:
我想要用既有的词库建一个词库,修改成我想要的格式
既有词库原本的格式为:
一 般 直 些 时 定 月 点
丁 二烯 烷 香
七 彩 嘴八舌 里香 零八落 情六欲
丈 夫 量 母娘 人
希望输出为(50是默认词频):
一般 50 一直 50 一些 50 一时 50 一定 50 一月 50 一点 50
丁二烯 50 丁烷 50 丁香 50
七彩 50 七嘴八舌 50 七里香 50 七零八落 50 七情六欲 50
丈夫 50 丈量 50 丈母娘 50 丈人 50
以下是我的程式码:
https://drive.google.com/open?id=1QGOG5uFO22OAcs9pgV83eVB41FpltqI-
如果输入的档案是英文可以正确执行
https://imgur.com/cVr45nT
但如果输入的档案是中文就会变成乱码
上网查了一下是因为在中文编码中一个字符占2bytes
用%c输出一次只能输出1byte
有看到资料说好像可以将char型别改为wchar_t
strlen的部分用wcslen替换
我用上面程式码中的第22行(被注解掉的那行)做了一些测试
好像还是有一些问题
https://imgur.com/jLvgT6L
最后一笔测资”你好吗”的wcslen似乎就有错误
输入档案中有夹带1byte的空格字符似乎也不能完全用wcslen算字符数
另外试了一下若输入为中文时想只输出一个中文字符(例如第一个字符)
printf(“%c”, data_buf[0])
试过用%c或%ls好像都会出现乱码或是错误
问了几位平常有在coding的同学
好像都没有处理过中文的问题
还请版上各位前辈帮忙了,感谢
作者: MOONRAKER (㊣牛鹤鳗毛人)   2017-11-03 15:05:00
用%s输出 第一个汉字就用substr取最前面两个字符
作者: stupid0319 (征女友)   2017-11-03 16:03:00
中文有UTF-8,UTF-16,跟BIG5,UTF8跟UTF16的码是一样的但UTF8存在内存的方式不同,详细要上网查看看程式默认比较建议用unicode来编码,可以吃万国码看你程式应该是用BIG5,也就是多字符,查一下规则把BIG5规则代入你的code中就不会有乱码了BIG5不太能用wchar来处理,碰到单个字母就会有乱码
作者: serikafan   2017-11-03 17:09:00
用wchar请用mbstowcs或是MultiByteToWideChar去转换在程式码中直接用中文会跟档案编码跟编译器有无支援相关,最好避免这么做英文出现乱码是因为你忘了在结尾补\0你的问题用wchar应该比较好解决https://ideone.com/wazkGa

Links booklink

Contact Us: admin [ a t ] ucptt.com