首页 > 其他 > 详细

source file encoding

时间:2014-03-03 15:48:12      阅读:449      评论:0      收藏:0      [点我收藏+]
bubuko.com,布布扣
#include <stdio.h>

int main(int argc, char *argv[])
{
    char *str = "aad你好ddx";
    printf("%s\n", str);
    return 0;
}
bubuko.com,布布扣

GBK version:

bubuko.com,布布扣
00000000  23 69 6e 63 6c 75 64 65  20 3c 73 74 64 69 6f 2e  |#include <stdio.|
00000010  68 3e 0d 0a 0d 0a 69 6e  74 20 6d 61 69 6e 28 69  |h>....int main(i|
00000020  6e 74 20 61 72 67 63 2c  20 63 68 61 72 20 2a 61  |nt argc, char *a|
00000030  72 67 76 5b 5d 29 0d 0a  7b 0d 0a 20 20 20 20 63  |rgv[])..{..    c|
00000040  68 61 72 20 2a 73 74 72  20 3d 20 22 61 61 64 c4  |har *str = "aad.|
00000050  e3 ba c3 64 64 78 22 3b  0d 0a 20 20 20 20 70 72  |...ddx";..    pr|
00000060  69 6e 74 66 28 22 25 73  5c 6e 22 2c 20 73 74 72  |intf("%s\n", str|
00000070  29 3b 0d 0a 20 20 20 20  72 65 74 75 72 6e 20 30  |);..    return 0|
00000080  3b 0d 0a 7d                                       |;..}|
00000084
bubuko.com,布布扣

hello-gbk.c

 

utf8 version:

bubuko.com,布布扣
00000000  23 69 6e 63 6c 75 64 65  20 3c 73 74 64 69 6f 2e  |#include <stdio.|
00000010  68 3e 0d 0a 0d 0a 69 6e  74 20 6d 61 69 6e 28 69  |h>....int main(i|
00000020  6e 74 20 61 72 67 63 2c  20 63 68 61 72 20 2a 61  |nt argc, char *a|
00000030  72 67 76 5b 5d 29 0d 0a  7b 0d 0a 20 20 20 20 63  |rgv[])..{..    c|
00000040  68 61 72 20 2a 73 74 72  20 3d 20 22 61 61 64 e4  |har *str = "aad.|
00000050  bd a0 e5 a5 bd 64 64 78  22 3b 0d 0a 20 20 20 20  |.....ddx";..    |
00000060  70 72 69 6e 74 66 28 22  25 73 5c 6e 22 2c 20 73  |printf("%s\n", s|
00000070  74 72 29 3b 0d 0a 20 20  20 20 72 65 74 75 72 6e  |tr);..    return|
00000080  20 30 3b 0d 0a 7d 0d 0a                           | 0;..}..|
00000088
bubuko.com,布布扣

hello-utf8.c

 

Linux下使用GCC编译:

a.out for ($ gcc hello-utf8.c)

bubuko.com,布布扣
000004d0  61 61 64 e4 bd a0 e5 a5  bd 64 64 78 00 00 00 00  |aad......ddx....|
bubuko.com,布布扣

 

a.out for ($ gcc hello-gbk.c)

bubuko.com,布布扣
000004d0  61 61 64 c4 e3 ba c3 64  64 78 00 00 01 1b 03 3b  |aad....ddx.....;|
bubuko.com,布布扣

注:运行后乱码

 

a.out for ($ gcc hello-gbk.c -finput-charset=gbk)

bubuko.com,布布扣
000004d0  61 61 64 e4 bd a0 e5 a5  bd 64 64 78 00 00 00 00  |aad......ddx....|
bubuko.com,布布扣

 

小结:Linux下GCC可以接受多种编码格式的源文件,编译成可执行文件时,字符串常量会统一转成utf8格式,如果不指定input-charset则按源文件格式来,这样导致运行时期乱码。

 

Windows下使用VC编译:

bubuko.com,布布扣
00000ef0  90 30 40 00 61 61 64 c4  e3 ba c3 64 64 78 00 00  |.0@.aad....ddx..|
bubuko.com,布布扣

小结:无论是GBK还是utf8编码的源文件,输出的EXE中,字符串常量都是以GBK编码保存。

source file encoding,布布扣,bubuko.com

source file encoding

原文:http://www.cnblogs.com/mohu3g/p/3576940.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!