源程序采用UNICODE编码时GCC编译器会发出null character(s) ignored警告

        将一个只用到标准库函数的 C 程序在 Windows 平台上用 VS 2010 编译,没有出任何问题。再将它放到 64 位 CentOS 6.8 下,用 GCC 编译它,接收到一大堆警告和错误报告,如下图:

        其中大部分是“null character(s) ignored”警告,还有一些像stray '***' 这样的错误。经过调查发现,原因在于在 Windows 平台上用文本编辑器保存这个 C 程序时,因为在其中用中文写了一些注释,保存时 Visual Studio 2010 IDE 显示了以下警告:

        warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失

        于是在文本编辑器中保存时,将编码设置为了 UNICODE,但是 GCC 编译器不能识别 UNICODE 编码格式的源文件,就会产生如上图所示的警告和错误。(注意: UNICODE 本身是一个很大的概念,包含 UTF-8、UTF-16、UTF32。但 Windows 平台上的 UNICODE 实质上是指 UTF-16 编码,Linux 平台上通常采用 UTF-8 编码。)

        由于只是想让这个 C 程序在 CentOS 6.8 上能执行,并不需要在 Linux 下编辑它,而且中文字符仅在程序的注释中出现,所以最简单的解决方法就是在 Windows 平台上用文本编辑器(比如 Notepad、Notepad++ 等)将这个 C 程序的源文件转换成 ASCII 编码或 UTF-8 编码。从 Windows 7 开始,自带的记事本 Notepad 在“另存为”时都允许用户选择编码方式。如下图所示:

        于是只需用记事本将原来的 C 程序另外保存一份,编码选择 ASNI 或 UTF-8 都可以,接下来将新保存的文件拿到 CentOS 6.8 下用 GCC 编译。此时程序就能顺利地被编译,GCC 不再报告警告和错误了。

        Windows 下的 Visual Studio 能够很好地自动识别源程序的编码方式,经过实验后发现:通过使用 Notepad 程序,将上面的 C 程序文件以 ANSI、Unicode、Unicode big endian、UTF-8 四种编码方式分别保存,在 VS 2010 中分别编译,都能够成功编译,不会像 GCC 那样产生警告和错误。

        (特别注意:使用 Notepad 程序将源文件以 UTF-8 编码方式保存时,实际上是以 UTF-8 + BOM 编码方式保存的!)



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值