黑马程序员技术交流社区

标题: 关于单个汉字所占字节个数 [打印本页]

作者: 寇亮    时间: 2014-8-7 21:19
标题: 关于单个汉字所占字节个数
本帖最后由 寇亮 于 2014-8-14 10:05 编辑

学习字符串时遇到汉字占字节个数的问题,相同的代码分别在MAC上和windows上进行编译,运行结果不同。截图见附件:单个汉字在Mac下占3个字节,在windows下占2个字节。分析出现这种情况有两个可能的原因:
1.在不同环境下汉字的编码方式不同导致;
2.Mac和windows的C语言编译器不同导致(windows下编译器为gcc 4.7.1)。

求高手解答,具体原因是什么?

Mac下运行结果.png (15.22 KB, 下载次数: 212)

MAC下运行结果

MAC下运行结果

QQ截图20140807210618.png (7.65 KB, 下载次数: 283)

windows下运行结果

windows下运行结果

作者: 寇亮    时间: 2014-8-7 21:30
经过实验可以认定真正的原因应该是编码方式不同。windows下分别用记事本和Codeblocks编辑上图代码,分别编译连接,用记事本编辑的代码显示汉字占两个字符,codeblocks编辑的代码汉字占三个字符。
作者: 从今以后    时间: 2014-8-7 21:51
学习了 感谢楼主分享
作者: -(_)-    时间: 2014-8-7 22:18
寇亮 发表于 2014-8-7 21:30
经过实验可以认定真正的原因应该是编码方式不同。windows下分别用记事本和Codeblocks编辑上图代码,分别编 ...

如果没记错的话, windows的中文版应该用bg2312, 而mac一般是用utf-8的吧, 不是很清楚这个
作者: cjfire    时间: 2014-8-8 09:23
我记得教程中好像说这个长度和平台相关。
作者: 天真    时间: 2014-8-8 09:37
你们上手就做的IOS么,我还在补习C+呢。。差距挺大的@@
作者: chengnuoaini030    时间: 2014-8-9 19:44
我就看看……
作者: 耀眼的小男人    时间: 2014-8-9 20:22
学习学习!!
作者: 大龄产妇    时间: 2014-8-10 00:01
记得没错的化,mac电脑中如果直接用终端编译也是两个字节,但是用xcode编译就是3个字节。原因是编译器不同,mac电脑是UNIX系统原生的gcc编译器,而xcode用的是clong编译器。没个编译器所遵守的汉子表(在原代码中是无法显示汉子类似于C语言中的ASCII码表)clong遵守的是UTF8这个。以前读过相关书籍,有错误也难免,希望看到错误给予指出。
作者: 王绍明    时间: 2014-8-10 08:32
我感觉是编译器导致的结果,或者你的输入法有误
作者: 寇亮    时间: 2014-8-10 10:48
王绍明 发表于 2014-8-10 08:32
我感觉是编译器导致的结果,或者你的输入法有误

用的是同一个编译器,所以可以排除编译器的影响。
作者: 寇亮    时间: 2014-8-10 11:06
本帖最后由 寇亮 于 2014-8-14 09:59 编辑

通过以下实验可以证明,是因为编码方式不同导致汉字所占字节数不同。

1. 新建文本文档,用记事本打开,输入以下代码:
  
  1. #include <stdio.h>
  2. #include <string.h>

  3. int main()
  4. {
  5.     int size = strlen("哈ha");
  6.     printf("%d",size);
  7.     return 0;
  8. }
复制代码

2. 文件——另存为——保存类型(所有文件)——文件名(size1.c)——编码(ANSI)——保存。
    在编码选项中可以看到记事本的默认编码方式为 ANSI 。


3. 文件——另存为——保存类型(所有文件)——文件名(size2.c)——编码(UTF-8)——保存。


4. 分别编译连接两个文件,然后运行。

222.png (67.76 KB, 下载次数: 281)

222.png

作者: 杜工    时间: 2014-8-10 11:29
gb2312,简体中文编码,一个汉字相当于两个英文字符。所以2个字节。
作者: istream    时间: 2014-8-10 22:01
我记得, .C文件和.CPP文件也是不同的,建议楼主在.CPP文件下面试一试。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2