昨天在编写程序过程中碰到一个问题,分词组件在加载词典时(词典文件是以UTF-8格式保存的txt文件),词典里的第一个词却找不到;跟踪进去后发现在加载词典时,第一个词的长度莫名的变长了一位,当时以为是带有空格或换行符,加了trim操作和去换行符,测试后问题依旧;
后来在网上google了一下,最终发现问题是由于Utf-8编码格式的文件所导致,如果Utf-8的文件被记事本、DW工具编辑过,但没有注意处理的方式,那么会自动在Utf-8文件中添加BOM格式,以表示文件是Utf-8编码的文件。
unicode编码为65279的字符叫“ZERO WIDTH NO-BREAK SPACE”即没有宽度的空格符,本质上也是null值,但是不同于null。byte-order mark(BOM)是位于码点U+FEFF的统一码字符的名称。当以UTF-16或UTF-32来将UCS/统一码字符所组成的字符串编码时,这个字符被用来标示其字节序。它常被用来当做标示文件是以UTF-8、UTF-16或UTF-32编码的记号。说白了就是位于文本最前面用来标识该unicode编码的文本内容是以UTF-8、UTF-16或UTF-32编码的。通过查询发现windows的记事本程序在打开文本内容后会自动添加BOM。(这部分摘自http://lwjlaser.iteye.com/blog/1319220)
因此,在编辑、更改任何文本文件时,请务必使用不会乱加BOM的编辑器。Linux下的编辑器应该都没有这个问题。WINDOWS下,请勿使用记事本等编辑器。推荐的编辑器是: Editplus 2.12版本以上; EmEditor; UltraEdit(需要取消‘添加BOM’的相关选项); Dreamweaver(需要取消‘添加BOM’的相关选项) 等。
对于已经添加了BOM的文件,要取消的话,可以用以上编辑器另存一次。(Editplus需要先另存为gb,再另存为UTF-8。)
DW解决办法如下:
用DW打开指定文件,按Ctrl+J->标题/编码->编码选择“UTF-8”,去掉"包括Unicode签名(BOM)"勾选->保存/另存为,即可!
或者另外一种办法就是在程序中读取文件时做下判断,看是否需要去掉第一行的第一个char,代码如下:
InputStreamReader FS = new InputStreamReader(in, "UTF-8");
BufferedReader SR = new BufferedReader(FS); // 文件输入流为
String strLine = SR.readLine();
if (strLine.length()>1){
if ((int)strLine.charAt(0)==65279){
strLine=strLine.substring(1);
}
}
分享到:
相关推荐
Java解决UTF-8的BOM问题
1.首先介绍一下本人应用场景,qt...3.此小工具主要针对utf-8编码文件,能够批量添加删除BOM,无识别转化ASIIC功能,添加BOM时,如果文件是utf-8(BOM),则跳过,删除亦然 4.当不选中添加删除时可用于文件数量统计。
解决PB创建UTF-8文件带BOM问题; 2.字段串直接生成XML文件。 由于项目需要,需要字符串转为XML文件,直接用Fileopen进行EncodingUTF8编码后,发现文件实际为UTF-8 BOM编码 问度娘发现有相同问题,但解决方式是利用...
UTF8BOM转换工具
文件的编码格式需要转换,gb2312,utf,utf-8等编码格式的相互转换等
基于C写的 UTF8-无BOM转为UTF16LE UTF8-无BOM转为UTF8 UTF8转为UTF8-无BOM
当上传文件存在中文时,修改上传文件编码为utf-8-bom
此文件用于快速反查php文件中的UTF8编码的文件是不是加了BOM,有则显示,无则跳过。(php源码)。 用途:主要用于整站所有文件为utf8无bom文件,个别文件却存bom,而造成的如:Warning: Cannot modify header information - ...
utf-8,去bom头文件gfgadsfdsa
NULL 博文链接:https://itsoul.iteye.com/blog/1488513
去除bom头小工具,工具使用方法: 选择要遍历的文件夹,输入...勾选ANSI转为UTF-8,则会将相应格式但编码为GB2312,GBK,GB18030的文件转为无BOM的UTF-8文件 请确保文件可写!使用前请做好备份,作者不承担任何法律责任
utf8格式的 php 代码里经常会混进 bom,且是不知不觉的,然后就会导致神奇莫测的问题。 这个工具就是专门用来删除utf8文件里的bom的。 把文件或者目录拖到工具的主窗口上,他就能自动遍历所有文件,找出带bom的...
批量utf文件转utf8-bom
1、Qt实现的gbk/utf8无bom文本转码小工具 2、用到了QDir QDirIterator 递归文件目录 3、QTextStream 以某种编码格式读取文本保存到QString,然后以另一种编码格式保存文本 代码比较简单。
php 字符编码转换类,支持ANSI、Unicode、Unicode big endian、UTF-8、UTF-8+Bom 互相转换。
UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式。字符"ZERO WIDTH NO-BREAK SPACE"的UTF-8编码是EF BB BF。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。 Windows就是使用BOM来...
我对之前的去BOM工具和需要的DLL进行了整合
然后用 GB2UTF81.exe 这个工具批量去掉BOM(源文件格式选 utf8,目标文件也选utf8,去掉 带BOM 的勾,不保留备份,再点 开始处理 即可)。然后把目录复制,覆盖原来的目录文件即可。 注意: 本工具暂时还不支持清除...
1. 如果你的IDEA是2017.2.2版本,那么直接把ecj-4.6.2.jar放到你的IDEA安装目录下lib文件夹中替换原文件即可 2. 如果你是其他版本的IDEA,那么用压缩工具处理你的DEA安装目录下lib文件夹中的ecj-x.x.x.jar文件(名字...