#include <stdio.h> int main(int argc, char *argv[]) { char *str = "aad你好ddx"; printf("%s\n", str); return 0; }
GBK version:
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
hello-gbk.c
utf8 version:
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
hello-utf8.c
Linux下使用GCC编译:
a.out for ($ gcc hello-utf8.c)
000004d0 61 61 64 e4 bd a0 e5 a5 bd 64 64 78 00 00 00 00 |aad......ddx....|
a.out for ($ gcc hello-gbk.c)
000004d0 61 61 64 c4 e3 ba c3 64 64 78 00 00 01 1b 03 3b |aad....ddx.....;|
注:运行后乱码
a.out for ($ gcc hello-gbk.c -finput-charset=gbk)
000004d0 61 61 64 e4 bd a0 e5 a5 bd 64 64 78 00 00 00 00 |aad......ddx....|
小结:Linux下GCC可以接受多种编码格式的源文件,编译成可执行文件时,字符串常量会统一转成utf8格式,如果不指定input-charset则按源文件格式来,这样导致运行时期乱码。
Windows下使用VC编译:
00000ef0 90 30 40 00 61 61 64 c4 e3 ba c3 64 64 78 00 00 |.0@.aad....ddx..|
小结:无论是GBK还是utf8编码的源文件,输出的EXE中,字符串常量都是以GBK编码保存。
source file encoding,布布扣,bubuko.com
原文:http://www.cnblogs.com/mohu3g/p/3576940.html