BOM
这里涉及到一个BOM(Byte Order Mark) 的概念.简单的讲,在Unicode标准中,为了标示文本文件的编码类型,可以在文本文件的开始插入几个特殊的byte,通过这几个特殊的byte,应用 程序就可以鉴别文本文件使用的是那种编码了.那几个特殊的byte也被称之为BOM(参考:http://unicode.org/faq/utf_bom.html ).
对于Unicode,几种编码的BOM如下:
UTF-32, big-endian 文件的前4个byte是:00 00 FE FF
UTF-32, little-endian文件的前4个byte是:FF FE 00 00
UTF-16, big-endian文件的前2个byte是:FE FF
UTF-16, little-endian文件的前2个byte是:FF FE
UTF-8文件的前3个byte是:EF BB BF
UTF-7的规律特殊一点,不是前几个byte,而是所有的byte转换为十进制都小于127.
- 使用UltraEdit打开一个文本文件,可以不用关心其编码.(Notepad创建的文件的默认编码还是当前code page设定的编码,在简体中文环境下是 CP936, 即GBK)
- 设定UltraEdit当前的code page: 选择 "View -> Set Code Page", 然后选择你需要的code page. 这样后面执行的编码转换操作都是根据这里设定的code page进行的.
- 选择 "Edit -> Hex Function -> Hex Edit" 进入Hex编辑模式,这样你可以输入任意你需要的16进制数字,例如 4E02(Unicode) 或者 8140(GBK) ( "丂" )
- 转换: 根据你当前的文件的编码,选择 "File -> Conversions -> Unicode to ASCII" 或者 "File -> Conversions -> ASCII to Unicode", 这里的ASCII就是便是当前的 Code Page的编码。
- 首先需要适当的字体,例如如果你的Windows是简体中文,而你想要转换 Unicode -> Big5,那么你需要 Big5 字体。从http://www.unifont.org/可以下载到很多字体。
- 即使有了合适的字体也不一定能正确的显示。我将我的系统 code page 设定成 CP950(Big5), 重起后将 UltraEdit 的 Code Page 设定成 CP936,然后转换 GBK <-> Unicode,结果是能够显示 Unicode编码的简体中文字符,而不能显示 GBK 编码的中文字符。估计可能是和字体的处理有关,字体处理如果和当前的 code page 有关的话,这种设定的不一致就会造成无法正确显示。不过在系统code page 是 CP936的情况下在选择了正确的字体后能显示繁体Big5-HKSCS的字符。
-
从 http://www.microsoft.com/globaldev/reference/WinCP.mspx 可以看到不同 Code Page 的编码转换表。
在编码方面UltraEdit存在一写令人费解的问题
Unicode规范中推荐的标记字节顺序的方法是BOM(Byte Order Mark)
UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式。如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。
由于UTF-8 BOM并没有得到广泛的支持,所以造成了一定范围内的不兼容。下面列出几个主要工具对于BOM的处理。
1. notepad
notepad 在保存时,选择UTF-8 格式,会在文件头写上BOM header.读取文件时,会分析BOM和文件中是否有中文字符,进而做出正确的选择。
2. notepad++
可以设置各种格式,有无BOM都支持。
3. editplus
文件保存时,选择UTF-8 格式,不会在文件头写上 BOM header.读取可以识别UTF-8
4. ultraedit
ultraedit在advanced->configuration中可以选择文件保存时是否写上BOM header.或者另存为中选择。读取是,如果没有设置自动检测UTF-8或者部分无BOM文件会无法正常显示。
5. Eclipse
如果设置了文件的编码问UTF-8,那么文件保存为无BOM格式。读取正常。
6. vi
指的是Linux 下的vim, 如果UTF-8 文件开头有BOM header, 其能够正常显示UTF-8 编码,否则,显示为乱码。
UltraEdit的主要问题
1. 如果新建一个文件,选择保存为UTF-8 无 BOM格式,如果数据中没有中文字符,或者charset=UTF-8,那么无论怎么保存,UE仍然会把文件保存为ANSI格式,这样,以后再加入中文的时候编码方式也不会改变,这就会造成Java Build程序生成的脚本含有乱码。
2. 如果是正确的UTF-8无BOM格式,在前9205个字符中如果没有中文,那么UE会顽固的认为此文件是ANSI格式,所以导致文件中文乱码(测试版本UE 13.10a)。解决办法就是主动的在前9205个字符前加入一个中文字符。
3. 哭笑不得的UTF-8自动检测。在advanced->configuration->Unicode/UTF-8 Auto Check中有自动检测UTF-8的选项,如果选择,经分析UE将采用三种检测方式:
a) 文件编码的开头是否有【EF BB BF】字符(即BOM),如果有则认为是UTF-8
b) 检查是否含有charset=UTF-8类似的文字,如果有,那么认为是UTF-8格式,这将导致以ANSI存储的文件乱码。
c) 如果是UTF-8无BOM格式的文档,UE会检查前9205个字符是否含有中文字符,如果有,如果没有则使用ANSI编码进行解析,造成后面的中文字符乱码。如果这个时候强制的用UE转换为UTF-8,则乱上加乱,文件作废。对于本身是ANSI格式存储的文件,没有此检测,中文正常。
4. UE打开UTF-8的文件默认会转换为UTF-16,影响不大。
对于用户
1. UE打开乱码的问题,在前9205字符中加入中文注释可以解决此问题,或者使用在UE的【文件】菜单中的【转换】->【UNICODE/UTF-8 到 UTF-8(Unicode编辑)】进行转换。
2. 不要使用UE来新建无中文的UTF-8无BOM文件。
3. 不要在已经乱码的文件中,删除乱码然后添加中文再保存。
4. 新建UTF-8无BOM文件可以使用Eclipse、Notepad++、EditPlus进行
5. 对于记事本保存的UTF-8脚本文件,Java Build程序也是可以识别的,但是Java文件不能使用记事本编辑编辑器无法识别文件头的EF BB BF标记
分享到:
相关推荐
简单好用的免费文本编辑器,可方便的进行各种编码转换。可支持列编辑模式、二进制模式等功能。 比UltraEdit小巧易用,而且是免费的。我一直用这个,推荐给大家!
使用VS2017这样的集成开发环境,可以方便地进行C++或者其他编程语言的开发,同时它也提供了丰富的库和工具,如iconv,来帮助实现编码转换功能。 总之,GBK和UTF-8是两种重要的字符编码格式,它们在不同的场景下各有...
《中文编码转换器详解:Big5、GBK、Unicode与UTF8的互换之道》 在计算机世界里,字符编码是沟通人类语言与机器之间的重要桥梁。...正确选择和使用编码转换器,可以帮助我们跨越编码障碍,实现信息的有效传递。
字符转换器3.0版是一款强大的工具,专为处理ASCII编码、大小写字母转换以及不同进制之间的转换而设计。在IT领域,这些基础知识对于理解数据的存储和传输至关重要。 首先,我们来深入了解一下ASCII(American ...
将汉字转换为十六进制编码(UltraEdit替换资源可以用到),经测试非常好用,分享给大家~~
1. 转换用途:中文到Unicode的转换主要用于确保中文信息能够在需要进行编码转换的场合正确传输或显示,如在短信发送模块中使用中文短信。 2. 需要的软件:UltraEdit(UE)是进行此类转换操作的一个常用软件。它是一...
在C#编程环境中,开发Unicode码生成器涉及到对字符串处理和编码转换的理解。C#支持Unicode,可以方便地进行字符和编码之间的转换。以下是关于Unicode码生成器的一些关键知识点: 1. **Unicode基础知识**: - ...
老的解决办法:将项目文件都设为utf-8编码,然后一个一个的文件用Ultraedit打开,粘贴到eclipse里面,在保存。这种办法最笨,最累,但没有发现其它好办法的时候,也只能干体力活了。毕竟,结果才是最重要的。 发现此...
对于中文程序员而言,这意味着在处理中文文本时,UtraEdit能更好地避免乱码问题,提供更准确的编码转换,使得在各种编码格式间切换变得更加顺畅。 然而,提到“注册机”,我们需要谨慎对待。注册机通常用于生成软件...
2. **高度可定制**:`hexy`允许用户自定义输出格式,如改变每行的字节数、调整颜色编码、添加自定义前缀等。这种灵活性使得它能在多种场景下发挥作用。 3. **Node.js与浏览器兼容**:`hexy`不仅适用于Node.js环境,...
内含完整的UNICODE支持,通过另存文件可以转换文件的字符编码。它为网页作者提供了方便的HTML编辑功能,设置了单独的HTML工具栏,大部分HTML编辑操作可以通过操作这个工具栏完成,可以直接预览设计的网页。软件特别...
ipSql.sql文件编码为UTF8,只要修改建表语名可适用于其它数据库,文件较大,可以先分解成多个文档再导入,注意要用类似UltraEdit等类似的专业文本工具打开,其它工具可能打开速度会很慢。 表中的IP已经转换成整型...
如果不是请用UltraEdit…等一些对UTF8支持转换的工具转换一下,最好不要用MS的记事本直接另存为转换,我开始的时候就是犯了这样一个错误。如果你是在 Dreamweaver 中编辑请按照:编辑–––》首选参数–––》新建...
4. **文本转换**:在需要批量转换文件编码或格式时,Uedit32的批量处理能力也能大显身手。 **总结:** Uedit32中文编辑器凭借其丰富的特性,强大的功能和良好的用户界面,成为了一款不可或缺的文本编辑工具。无论...
1.6.3 UltraEdit 21 1.6.4 EditPlus 22 1.6.5 支持PHP的IDE环境 22 1.7 小结 23 第2章 PHP的基础语法 24 2.1 语言构成与工作原理 24 2.2 常量与变量 25 2.2.1 常量的定义 25 2.2.2 变量的定义 26 2.2.3 变量的作用域...
3. **自动装箱与拆箱(Autoboxing/Unboxing)**: 为了解决原始类型与对应的包装类之间的转换问题,JDK1.5引入了自动装箱和拆箱,使得在基本类型与包装类之间进行操作更加简洁。 4. **变量注入(Annotations)**: ...
在编辑后,使用 文件-转换-ASCII转UTF-8(UNICODE编辑),指定文件中的中文使用utf8编码。 在保存前,设置格式如下: 换行符:UNIX终束符 - LF 指定文件中的回车/换行符为编码0A的换行符 格式:UTF-8 - ...
这是不同系统编码格式引起的:在windows系统中编辑的.sh .py文件可能有不可见字符,所以在Linux系统下执行会报以上异常信息。一般是因为windows行结尾和linux行结尾标识不同造成的。 解决: 1)在windows下转换: ...
如果从行首匹配,可以用“^”来实现,不过 EditPlus 有另一个功能可以很简单的删除行首的字符串 a. 选择要操作的行 b. 编辑-格式-删除行注释 c. 在弹出对话框里面输入要清除的行首字符,确定 【4】正则表达式应用...
- **工作原理**:Perl解释器会逐行读取源代码并将其转换为字节码,然后执行这些字节码。 - **执行程序**:Perl脚本通过解释器运行,可以在多种操作系统上运行,包括Windows、Linux和Unix等。 #### 二、Perl的基本...