转自:https://blog.csdn.net/wolf_break/article/details/37904237

在编译c文件的时候,出现如下错误:

error: stray ‘\357’ in program
error: stray ‘\274’in program
error: stray ‘\233’in program

百思不得其解,怒百度之,几番查找之下,终于找出原因:

原来是UTF-8编码问题。UTF-8编码有BOM和无BOM格式。BOM,ByteOrderMark(字节标记顺序),表明使用UTF8来进行编码。UTF-8的BOM通常为3个字节EF BB BF。转换成对应的字符查看,就是‘\357’,‘\274’,‘\233’。

本着实践才是硬道理的原则,我做了一个验证:

1):notepadd++打开一个文件,分别使用UTF-8无BOM格式和UFT-8格式,使用winhex进行查看,可以看到带BOM格式的头部有EF BB BF三个字节,所以编译时会报错。

无BOM格式不存在头3个,

2):notepadd++打开一个文件,分别使用UTF-8无BOM格式和UFT-8格式,linux下输入od -tc 源文件名,查看。

带BOM:

无BOM:

问题解决,所以以后编程时特别注意编码问题。使用UTF-8无BOM格式或者ANSI格式。

考虑到之前写php程序时也经常出现一些编码问题,在这里我对各种编码进行一个系统的学习。学习资料来自你到底是UTF-8还是ANSI,该文简洁易懂,实乃居家旅行,出门必备之必读文章。扯远了。。

现在做对各种编码格式作一个总结:

1):ANSI.

谈到ANSI,估计你就想到ascii码表了。0-31这32个值用作特殊用途,当打印机或终端遇上这些字符时,便会做出特定的动作。从32到127,这些值用来表示打印字符(英文字符,运算符等),再之后,世界其他国家开始使用计算机,他们国家的文字编码相应的就填充到128-255这些值中,这些就被称为拓展字符集。上述就统称为ANSI编码.

ASCII码大致可以分作三部分組成:

第一部分是:ASCII非打印控制字符;
第二部分是:ASCII打印字符;
第三部分是:扩展ASCII打印字符。

ascii码
2):gb2312,  gbk, gb18030
gb2312:
等到中国人民开始使用计算机的时候,已经没有剩余的字符给中国人民使用了。但是,美帝是无法难倒聪明的中国人民的,中国人开始想到用两个字节表示汉字,第一个字节从OXA1-OXF7,第二个字节从OXA1-OXFE,这样就可以组合出7000多个汉字,ascii码本来有的数字标点,字母统一重新编了两个字符的编码,这就是全角字符,原来的127一下的就叫做半角字符。这就是gb2312编码的由来。

gbk:

后来中国人民发现,还是有些汉字在gb2312中无法显示出来,所以规定第一个字节从OXA0-0XFF,第二个字节不限。这样又增加了近20000个新汉字和符号。这就是gbk编码的由来。

gb18030:

在汉字系统中,少数民族也开始进入,为了增加少数民族汉字,又加了几千个少数民族汉字,这就是gb18030编码由来。

这三种编码统一称为DBCS,double byte charecter set双字节字符编码。

3):UCS(俗称UNICODE)

这时候,每个国家都开始制定自己的文字编码,编码格式乱的一B,这时候ISO站了出来,发明了UNICODE这种编码来统一世界上各种编码。

UNICODE--universal multiple-octet coded charecter set。unicode直接规定,所有字符统一用两个字节来表示。对于ascci码半角字符小于127字符,编码不变,8位拓展为16位(只含英文字符的unicode文章大大浪费存储啊,这么多高位0,不过ISO表示咱不在乎这点空间),对于其他国家的双字符编码,统一重新进行编码。如上就是UNICODE编码。这里要说一个问题,两个字节存储,你会想到什么?没错,那就是大小端问题。所谓大小端,无法就是大端高位字节存在低位存储单元(高位在前),小端就是低位字节存在低位存储单元(低位在前)。UNICODE区分出大小端,在网络传输时,如何判断字节流是大端还是小端呢?为了解决这个问题,UNICODE引入两个字节的BOM,对于大端模式来说,那就是FE FF;对于小端模式来说,那就是FF FE(OX00位置FF,OX00位置FE,别混乱了啊)。这样我们就可以区分出是大端还是小端。

4)UTF

随着网络时代的来临,UNICODE在网络上的传输成为一个问题。并且,考虑到unicode编码和ansi编码之间的兼容问题,此时出现UTF(UCS Tranfer Format)编码,一来解决传输问题,二来和ASCII编码保持最大程度的兼容,这样做的好处是压缩了字符在西欧一些国家的内存消耗,减少了不必要的资源浪费。这里给出一个UNICODE和UTF-8的对换标准:

UNICODE

0000-007f

0080-07ff

0800-FFFF

UTF

0xxxxxxx

110xxxxx  10xxxxxx

1110xxxx 10xxxxxx 10xxxxxx

好了,各个编码标准的来源都扯了一遍,感觉更明白了点。
————————————————
版权声明:本文为CSDN博主「wolf_break」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wolf_break/article/details/37904237

[转]c编译错误--error:stray \357 in program及其引发的字符编码概述相关推荐

  1. 程序编译错误error: stray ‘\200’ in program;error: stray ‘\343’ in program\CodeToCompile

    程序编译错误error: stray '\200' in program:error: stray '\343' in program 问题分析 实验 原理 问题分析 CodeToCompile 当你 ...

  2. C/C++: “error: stray ‘\357’ in program“问题及其解决方法

    目录 1. 问题由来 2. UTF-8 BOM (byte order mark) 3. 简单的实验 4. What is FEFF? 5. 解决方法 5.1 方法一 5.2 方法二 5.3 方法三: ...

  3. 遇到error: stray ‘\357’ in program [solution.c]的解决办法

    该错误是指源程序中有非法字符,需要将非法字符去掉.一般是由于coder使用中文输入法或者从别的地方直接复制粘贴代码造成的. 代码中出现了中文空格,中文引号, 各种中文标点符号都会出现,简单修改一下就O ...

  4. 当遇到error: stray ‘\241‘ in program错误的解决方法

    当遇到error: stray '\241' in program错误的解决方法 报错的意思是c/c++中的产生了编译错误. 该错误是指源程序中有非法字符,需要将非法字符去掉.一般是由于coder使用 ...

  5. Dev-C++当遇到 [error] stray ‘\241‘ in program ... 时发生错误的解决方法

    当遇到 [error] stray '\241' in program - 时发生错误的解决方法 为什么会报错? 报错的意思是中文字符不识别导致产生了编译错误. 该错误是指源程序中有非法字符,需要将非 ...

  6. cv_bridge与python版本问题导致编译错误error: return-statement with no value, in function returning ‘void*’ [-fpe

    1.先说一下报错的过程(着急看解决过程的直接看第二点): 首先,在使用OpenCV时候,报错如下: [ERROR] [1663728000.010723, 6019.022000]: bad call ...

  7. C语言错误:error stray ‘ 302’ in program

    程序编译出错: $ cc a.c a.c: In function 'main': a.c:16:9: error: stray '\302' in programelse if (c == ' ' ...

  8. IAR的一个编译错误Error[e27]: Entry GenericApp_Init::?relay in module Coordinator

    IAR的一个编译错误Error[e27]: Entry "GenericApp_Init::?relay" in module Coordinator   我们在编译Zigbee协 ...

  9. gcc编译报错-stary '\357' in program

    写在前面: 这一次的bug是我在做LeetCode的时候遇到的.想想如果真正做题环境还是没办法上网Google的,所以,还是记录一下,也算是小问题了.但积跬步至千里嘛. 错误提示: LeetCode在 ...

最新文章

  1. 周志华出任京东人工智能研究院学术委员会委员
  2. 按原有结构恢复被删除的FAT32文件夹
  3. pythonweb开发-手把手教你写网站:Python WEB开发技术实战
  4. 服务器自动登录 linux,linux下如何自动登录远程服务器?
  5. nginx在Centos下的安装,转:http://www.linuxidc.com/Linux/2016-09/134907.htm
  6. Linux下c开发 之 线程通信与pthread_cond_wait()的使用
  7. 移动平台深度神经网络实战
  8. 为什么都建议学java而不是python-现在学Python还是Java好呢?
  9. 小白写linux环境下的定时监测
  10. TOC约束理论AUTOCAD技巧
  11. 微信公众号迁移公证办理流程
  12. 如何使用一键回录游戏视频
  13. 解决oracle 报 ORA-20000(ORU-10027)错误的方法
  14. 【码农学编曲】吉他伴奏
  15. java菜单管理模块_后台管理系统-菜单管理模块
  16. 两个double之间的运算
  17. 浏览器打开服务器上的图片无法显示,网页中的图片打不开怎么办?原因与解决办法...
  18. java 监听客户端的退出_Java socket 服务端如何监控客户端异常关闭?
  19. 求最长不下降序列:逆推法
  20. Android一键锁屏功能的实现

热门文章

  1. 【计算机科学】mini-AORCNN:一种基于Bottleneck Transformer的轻量级微表情识别架构——CCF T2
  2. Windows软件安装包制作工具汇总
  3. 初学爬虫之 urllib 库的介绍与使用(一)
  4. python 监控京东霍尼韦尔(Honeywell)N95口罩是否到货,到货邮件提醒
  5. React Native学习(五)—— 使用插件react-native-scrollable-tab-view
  6. DEVC++实现火柴人跑酷游戏
  7. BT下载教程之UPnP功能使用、BT端口映射、内网外网之完全解析
  8. 微信小程序-----滚动字幕
  9. 最新,四大运营商移动通信频段使用情况!
  10. Linux系统安装jdk教程(超级详细)