`

用ultraedit实现编码转换

 
阅读更多

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.



  1. 使用UltraEdit打开一个文本文件,可以不用关心其编码.(Notepad创建的文件的默认编码还是当前code page设定的编码,在简体中文环境下是 CP936, 即GBK)
  2. 设定UltraEdit当前的code page: 选择 "View -> Set Code Page", 然后选择你需要的code page. 这样后面执行的编码转换操作都是根据这里设定的code page进行的.
  3. 选择 "Edit -> Hex Function -> Hex Edit" 进入Hex编辑模式,这样你可以输入任意你需要的16进制数字,例如 4E02(Unicode) 或者 8140(GBK) ( "丂" )
  4. 转换: 根据你当前的文件的编码,选择 "File -> Conversions -> Unicode to ASCII" 或者 "File -> Conversions -> ASCII to Unicode", 这里的ASCII就是便是当前的 Code Page的编码。
  5. 首先需要适当的字体,例如如果你的Windows是简体中文,而你想要转换 Unicode -> Big5,那么你需要 Big5 字体。从http://www.unifont.org/可以下载到很多字体。
  6. 即使有了合适的字体也不一定能正确的显示。我将我的系统 code page 设定成 CP950(Big5), 重起后将 UltraEdit 的 Code Page 设定成 CP936,然后转换 GBK <-> Unicode,结果是能够显示 Unicode编码的简体中文字符,而不能显示 GBK 编码的中文字符。估计可能是和字体的处理有关,字体处理如果和当前的 code page 有关的话,这种设定的不一致就会造成无法正确显示。不过在系统code page 是 CP936的情况下在选择了正确的字体后能显示繁体Big5-HKSCS的字符。
  7.  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

 

 ultraeditadvanced-&gt;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-8BOM格式,在前9205个字符中如果没有中文,那么UE会顽固的认为此文件是ANSI格式,所以导致文件中文乱码(测试版本UE 13.10a)。解决办法就是主动的在前9205个字符前加入一个中文字符。

 

3.  哭笑不得的UTF-8自动检测。在advanced-&gt;configuration-&gt;Unicode/UTF-8 Auto Check中有自动检测UTF-8的选项,如果选择,经分析UE将采用三种检测方式:

 

a)   文件编码的开头是否有【EF BB BF】字符(即BOM),如果有则认为是UTF-8

 

b)   检查是否含有charset=UTF-8类似的文字,如果有,那么认为是UTF-8格式,这将导致以ANSI存储的文件乱码。

 

c)   如果是UTF-8BOM格式的文档,UE会检查前9205个字符是否含有中文字符,如果有,如果没有则使用ANSI编码进行解析,造成后面的中文字符乱码。如果这个时候强制的用UE转换为UTF-8,则乱上加乱,文件作废。对于本身是ANSI格式存储的文件,没有此检测,中文正常。

 

4.  UE打开UTF-8的文件默认会转换为UTF-16,影响不大。

 

对于用户

1.  UE打开乱码的问题,在前9205字符中加入中文注释可以解决此问题,或者使用在UE的【文件】菜单中的【转换】-&gt;UNICODE/UTF-8  UTF-8Unicode编辑)】进行转换。

 

2.  不要使用UE来新建无中文的UTF-8BOM文件。

 

3.  不要在已经乱码的文件中,删除乱码然后添加中文再保存。

 

4.  新建UTF-8BOM文件可以使用EclipseNotepad++EditPlus进行

 

5.  对于记事本保存的UTF-8脚本文件,Java Build程序也是可以识别的,但是Java文件不能使用记事本编辑编辑器无法识别文件头的EF BB BF标记

 

 

 

 

分享到:
评论

相关推荐

    免费的、可编码转换的文本编辑器

    简单好用的免费文本编辑器,可方便的进行各种编码转换。可支持列编辑模式、二进制模式等功能。 比UltraEdit小巧易用,而且是免费的。我一直用这个,推荐给大家!

    GBK 与 UTF-8 间编码转换

    总是碰到utf8编码与gbk编码间的互转,开始用ultraedit自己另存设置,文件多了太麻烦,自己写了一个小程序来处理,用vs2017写的,需要安装运行环境,已经安装的可以免了

    汉字十六进制转换工具

    将汉字转换为十六进制编码(UltraEdit替换资源可以用到),经测试非常好用,分享给大家~~

    中文 Big5/GBK/Unicode/UTF8 内码转换器

    档案转换只能将纯文字格式的文件(例如 txt, html 等)转码,并不适用于如 MS Word, Excel 等 binary 档案。

    eclipse乱码+开源转码插件+批量操作

    老的解决办法:将项目文件都设为utf-8编码,然后一个一个的文件用Ultraedit打开,粘贴到eclipse里面,在保存。这种办法最笨,最累,但没有发现其它好办法的时候,也只能干体力活了。毕竟,结果才是最重要的。 发现此...

    AptEdit Pro 5.1.0破解版

    内含完整的UNICODE支持,通过另存文件可以转换文件的字符编码。它为网页作者提供了方便的HTML编辑功能,设置了单独的HTML工具栏,大部分HTML编辑操作可以通过操作这个工具栏完成,可以直接预览设计的网页。软件特别...

    纯真IP数据库(2008-11-15)SQL版

    ipSql.sql文件编码为UTF8,只要修改建表语名可适用于其它数据库,文件较大,可以先分解成多个文档再导入,注意要用类似UltraEdit等类似的专业文本工具打开,其它工具可能打开速度会很慢。 表中的IP已经转换成整型...

    PHP 出现乱码和Sessions验证问题的解决方法!

    如果不是请用UltraEdit…等一些对UTF8支持转换的工具转换一下,最好不要用MS的记事本直接另存为转换,我开始的时候就是犯了这样一个错误。如果你是在 Dreamweaver 中编辑请按照:编辑–––》首选参数–––》新建...

    php网络开发完全手册

    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 变量的作用域...

    PHP程序开发范例宝典III

    实例250 使用格式化函数转换查询条件的数据类型 385 实例251 在查询中使用字符串函数 387 实例252 在查询中使用日期函数 388 8.19 having语句应用 390 实例253 利用having语句过滤分组数据 390 ...

    sphinx中文语音训练手册

    在编辑后,使用 文件-转换-ASCII转UTF-8(UNICODE编辑),指定文件中的中文使用utf8编码。 在保存前,设置格式如下: 换行符:UNIX终束符 - LF 指定文件中的回车/换行符为编码0A的换行符 格式:UTF-8 - ...

    bash: /usr/bin/autocrorder: /usr/bin/python^M: bad interpreter: No such file or directory

    这是不同系统编码格式引起的:在windows系统中编辑的.sh .py文件可能有不可见字符,所以在Linux系统下执行会报以上异常信息。一般是因为windows行结尾和linux行结尾标识不同造成的。 解决: 1)在windows下转换: ...

    editplus 代码编辑器html c++ jsp css

    如果从行首匹配,可以用“^”来实现,不过 EditPlus 有另一个功能可以很简单的删除行首的字符串 a. 选择要操作的行 b. 编辑-格式-删除行注释 c. 在弹出对话框里面输入要清除的行首字符,确定 【4】正则表达式应用...

    EditPlus 2整理信箱的工具

    如果从行首匹配,可以用“^”来实现,不过 EditPlus 有另一个功能可以很简单的删除行首的字符串 a. 选择要操作的行 b. 编辑-格式-删除行注释 c. 在弹出对话框里面输入要清除的行首字符,确定 【4】正则表达式应用...

    Editplus 3[1].0

    如果从行首匹配,可以用“^”来实现,不过 EditPlus 有另一个功能可以很简单的删除行首的字符串 a. 选择要操作的行 b. 编辑-格式-删除行注释 c. 在弹出对话框里面输入要清除的行首字符,确定 【4】正则表达式应用...

Global site tag (gtag.js) - Google Analytics