`
田智伟
  • 浏览: 206439 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

代码编译出现(illegal character: \65279)

阅读更多

今天在代码打包时报如下错误::1: illegal character: 5279

查看文件确实是UTF-8的最后在高人指点下看到

http://blog.csdn.net/shixing_11/article/details/6976900

这篇blog,总算明白什么原因了,与这个几乎完全一样的问题

网上看到了很多解决方法,一番折腾后还是我的工具比较神器NotePad++自带去除BOM功能

图片一所示的是当前查看视图,如果要修改格式就选择图片2标记的地方

 

 

 

表面看着该文件确实没错,看不出来问题,后来从SVN上更新下代码以后,发现本地也不报错,后来通过Eclipse查看了该xxx.java类的属性,才发现玄机所在:

 

编译有问题的文件属性:(注意最下面一行 Byte Order Mark is UTF-8  (BOM)

编译正常的文件属性:

看来问题出在 Byte Order Mark is UTF-8  (BOM)上。因为看不出来问题,所以用UltraEdit打开两个文件,并用16进制格式显示:

有问题的文件头:

无问题的文件头:

看来有问题的文件头前面多了三个字节EF BB BF。

具体原因如下:

        某些编辑器会往utf8文件中添加utf8标记(editplus称其为签名),它会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM),它的表示的是 Unicode 标记(BOM)。 因此要解决这个问题的关键就是把这个标记选项去掉,可按如下方法操作。 
        首先用editplus打开这个文件,从Doucument菜单中选择Permanet Settings,有三个分类,分别是General,File, Tools.点击File,右边会有一项是 UTF-8 signature: 选择 always remove signature. 点击OK 。中文版本的 Editplus 下操作的菜单结构如下: 文档->参数设置->文件->UTF-8签名->总是移除签名->确定 ,这样就设置了UTF-8格式不需要在文件前面加标记,最后把文件另存为utf-8格式就好了.

相关资料,网上摘抄:

         UTF-8以字节为编码单元,没有字节序的问题。UTF-16以两个字节为编码单元,在解释一个UTF-16文本前,首先要弄清楚每个编码单元的字节序。例如收到一个“奎”的Unicode编码是594E,“乙”的Unicode编码是4E59。如果我们收到UTF-16字节流“594E”,那么这是“奎”还是“乙”?Unicode规范中推荐的标记字节顺序的方法是BOM。BOM不是“Bill Of Material”的BOM表,而是Byte Order Mark。BOM是一个有点小聪明的想法:在UCS编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输字符"ZERO WIDTH NO-BREAK SPACE"。这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little-Endian的。因此字符"ZERO WIDTH NO-BREAK SPACE"又被称作BOM。UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式。字符"ZERO WIDTH NO-BREAK SPACE"的UTF-8编码是EF BB BF(读者可以用我们前面介绍的编码方法验证一下)。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。Windows就是使用BOM来标记文本文件的编码方式的。原来BOM是在文件的开始加了几个字节作为标记。

扩展阅读:

UTF-8, UTF-16, UTF-32 & BOM:http://www.unicode.org/faq/utf_bom.html#BOM

W3C官方说明:http://www.w3.org/International/questions/qa-utf8-bom

参见:

http://baifjece.blog.163.com/blog/static/337946542011113015829596/

http://www.arkulo.com/?post=57

http://blog.csdn.net/shixing_11/article/details/6976900

 

  • 大小: 111.5 KB
分享到:
评论

相关推荐

    cleanbom:从adt迁移到android studio有可能出现:编译Java产生 illegal character

    cleanbom编译Java产生 illegal character: \65279 错误的问题是由于Windows系统开发的编码为UTF-8(BOM)导致,BOM是Byte-Order Mark的意思。一种为了让编辑器自动识别编码。在文件前3个字节加上了EE,BB,BF,但标准的...

    C心得 编译时错误提示语句释义

    1. **Ambiguous symbol 'xxx'**:这个错误意味着在代码中出现了符号`xxx`,但编译器无法确定它的确切含义,可能是因为同名变量、函数或类型在不同作用域中定义,或者在未正确包含头文件的情况下使用了外部声明。...

    (完整word版)C语言程序编译常见错误对照.doc

    C语言程序编译常见错误对照是指在C语言程序编译过程中可能出现的错误类型及其对照描述。本文将详细介绍C语言程序编译常见错误对照,帮助开发者快速定位和解决编译错误。 1. fatal error C1003: error count exceeds...

    c++编译错误对照表.docx

    C++ 编译错误是指在编译 C++ 代码时出现的错误信息,以下是常见的编译错误信息对照表: 1. fatal error C1003: error count exceeds number; stopping compilation 中文对照:(编译错误)错误太多,停止编译分析...

    TC 编译连接错误提示信息

    - **含义**:代码片段没有实际效果。 - **解决方法**:删除无效的代码。 17. **Compound statement missing {** - **含义**:复合语句缺少左花括号`{`。 - **解决方法**:添加遗漏的左花括号`{`。 18. **...

    程序设计编译常见错误提示

    37. **Illegal character 'x'**:非法字符 'x',检查源代码中是否有不合法的字符。 38. **Illegal initialization**:初始化操作非法,可能是类型不匹配或其他语法错误。 39. **Illegal octal digit**:非法的八...

    华南理工大学计算机全英班编译原理实验1

    Illegal character, that is, scanner may recognize a character that is not in the alphabet of TINY+, such as $ is an illegal character The right bracket of a STRING is lost, such as ' scanner The...

    VisualC++6.0编译连接出错汇总

    29. **Illegal character 'x'**:非法字符。检查代码中是否有不符合C++语法的特殊字符。 30. **Illegal initialization**:非法的初始化,比如对非静态成员变量的默认初始化。确保初始化符合C++的规则。 31. **...

    C++ gcc编译器常见编译错误表

    - **解释**:代码中出现了非法字符。 - **解决方案**:删除或替换非法字符。 #### 41. Illegal initialization (非法的初始化) - **解释**:初始化表达式不合法。 - **解决方案**:使用正确的初始化方式。 #### 42...

    VC6.0编译常见错误的详解及其错误分析[定义].pdf

    了解并理解这些编译错误可以帮助我们更快地调试代码,提高编程效率。在编程过程中,细心检查和遵循最佳实践可以减少这些错误的出现。当遇到这些错误时,首先要查看错误提示,然后检查错误发生的上下文,通常问题的...

    delphi编译错误.txt

    - **解决办法**: 检查代码错误并尝试重新编译。 34. **Constant expected** - **含义**: 当前上下文中需要常量。 - **解决办法**: 使用常量替换当前表达式。 35. **Constant expression expected** - **含义...

    C语言编译软件常用英语词汇[参考].pdf

    4. **Error**:编译错误是指程序在编译阶段发现的不符合语言规则的问题,导致无法生成可执行代码。 5. **Parameter**:参数是函数定义的一部分,它们在函数调用时接收值,帮助函数执行其功能。 6. **Illegal**:...

    C++常见错误

    中文对照:编译错误,宏定义时出现了意外的 xxx分析:宏定义时宏名与替换串之间应有空格,例如“#define TRUE"1"” 解决方法:检查宏定义的语法,确保宏名与替换串之间有空格。 9. error C2009: reuse of macro ...

    VC常用错误的汉语翻译

    ### VC常用错误的汉语翻译及解析 #### 一、错误概览 在使用Visual C++ 6.0(简称VC6.0)进行...通过以上详细的解析,开发者可以更好地理解VC6.0中出现的各种编译错误,并能够迅速定位问题所在,从而提高开发效率。

    VC++6.0常见错误提示

    - **中文对照**:(编译错误)带参宏的形式参数表中出现未知字符 - **分析**:这类错误通常是由于宏定义中的参数列表中包含了无效字符。例如: ```c++ #define double(x|) x * x // 错误示例 ``` 正确的做法是...

    c语言编译常见错误列表

    虽然这不是一个编译错误,但通常意味着这部分代码可以被安全地删除。 此外,还有一些其他类型的警告信息,例如运算符顺序不明确、符号定义不清等,这些都需要开发者根据实际情况进行调整和优化。 总之,理解并正确...

    计算机C语言常见错误分析中英文对照表

    在C语言编程中,开发者经常会遇到各种错误,这些错误可能会阻碍程序的编译和执行。...同时,使用良好的编程习惯,如适当的注释、清晰的代码结构以及遵循C语言语法规则,能够显著减少这类错误的出现。

    C与C++常见错误中英文对照

    如果编译过程中出现的错误导致编译器无法继续处理后续代码,就会发生这种情况。解决方法是首先解决之前出现的错误,再尝试重新编译。 ### 5. error C2001: newline in constant **中文对照**: (编译错误)常量中...

    C++常见错误中英文对照表

    - **中文对照**: (编译错误)带参宏的形式参数表中出现未知字符 - **分析**: 宏定义中的参数列表不应该包含除了标识符以外的任何字符。例如,在宏定义`#define MY_MACRO(a|) a * a`中,参数`a`后面跟了一个非法的...

Global site tag (gtag.js) - Google Analytics