关于源文件用不同的编码方式编写,会导致执行结果不一样的现象及解决方法

如果我们编写以下程序,并分别另存为ANSI和UTF-8两种不同的编码方式保存,放到Linux下编译并运行如下图,两端相同的程序以不同的编码方式保存编译后的运行结果不一样,./ansi采用ANSI编码方式,会自动采用GBK方式来保存中文汉字“中”(“中”的GBK编码就是d6 d0,utf-8则是e4 b8 ad),那么我们有没有什么办法能够解决不同编码方式保存才来的执行结果不同的问题呢

#include <stdio.h>

int main(int argc, char **argv)
{
	int i = 0;
	unsigned char *str="abc中";

	while (str[i])
	{
		printf("%02x ", str[i]);
		i++;
	}
	printf("\n");
	return 0;
}

 

运行结果

怎么解决?编译程序时,要指定字符集

我们通过man gcc ,并以/charset查找可以知道,我们可以在编译程序的时候指定编码方式如下

-finput-charset=charset  表示源文件的编码方式, 默认以UTF-8来解析
-fexec-charset=charset   表示可执行程序里的字时候以什么编码方式来表示,默认是UTF-8

 

gcc -finput-charset=GBK -fexec-charset=UTF-8 -o utf-8_2 ansi.c

指定源文件的编码方式为GBK(GBK兼容ansiic码的,因为ansiic码很少,只有200多个)

指定可执行程序里的字时候以UTF-8编码方式来表示,结果如下图,我们成功地解决了这个编码问题。

 

 

如果我们没有指定,源文件的编码方式, 默认以UTF-8来解析,可执行程序里的字默认也是UTF-8,那么我们之前编译第一个程序./ansi的时候,ansi.c的编码方式是ANSI,而我们默认采用UTF-8为什么没有报错呢,这只能说gcc编译器没有那么的伟大,自动识别出来(毕竟不是专门做字符的编码处理的),需要我们手动地指定才能够得出正确结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值