昨天在编写程序过程中碰到一个问题,分词组件在加载词典时(词典文件是以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问题。 首先,我们需要理解什么是BOM。BOM是Unicode编码中的一个特殊字符,它的Unicode码点是`U+FEFF`,在UTF-8编码中,BOM的字节序列是`EF BB BF`。BOM的主要作用是在数据...
本文将深入探讨几种常见的编码格式,如GB2312、UTF-8以及UTF-8-BOM,并详细讲解如何在C#中进行这些编码格式之间的转换,同时会涉及到与Stream相关的操作。 GB2312,全称为“国标汉字编码字符集”,是中国大陆广泛...
标题"批量去掉UTF-8文件中BOM标示符"指的是处理这一问题的方法,即通过特定工具或代码删除UTF-8文件开头的BOM标识。这个过程通常是为了确保文件在不同的系统和环境中能够正确无误地被读取和处理。 描述中提到的博文...
1.首先介绍一下本人应用场景,qt...3.此小工具主要针对utf-8编码文件,能够批量添加删除BOM,无识别转化ASIIC功能,添加BOM时,如果文件是utf-8(BOM),则跳过,删除亦然 4.当不选中添加删除时可用于文件数量统计。
UTF8BOM转换工具
"批量utf文件转utf8-bom"这个主题指的是将一批以UTF编码的文件转换为带有BOM(Byte Order Mark)的UTF-8编码。BOM是一个特殊的字节序列,用于标识文件的编码类型,对于UTF-8编码,BOM的字节序列为0xEF, 0xBB, 0xBF。...
解决PB创建UTF-8文件带BOM问题; 2.字段串直接生成XML文件。 由于项目需要,需要字符串转为XML文件,直接用Fileopen进行EncodingUTF8编码后,发现文件实际为UTF-8 BOM编码 问度娘发现有相同问题,但解决方式是利用...
本主题主要关注UTF8和UTF16LE两种不同的字符编码格式之间的转换,特别是如何进行无BOM(字节顺序标记)的处理。下面我们将深入探讨这两种编码方式以及它们在实际应用中的转换。 首先,UTF8是一种广泛使用的变长...
"UTF-8去BOM头工具"就是为了解决这个问题而设计的。这个工具整合了之前的去BOM工具和所需的DLL(动态链接库)文件,使得用户可以方便地处理含有BOM头的UTF-8文件。DLL文件通常包含了一组可供其他程序调用的函数或...
"BOM"是Byte Order Mark的缩写,UTF-8的BOM头是一个特殊的三位字节序列(0xEF, 0xBB, 0xBF),用于标识文件是以UTF-8编码的。然而,在某些情况下,这个BOM头可能会引起问题,例如在编程或文本处理时,因此我们需要...
当上传文件存在中文时,修改上传文件编码为utf-8-bom
在UTF-8编码中,BOM是一个由三个字节组成的序列:0xEF, 0xBB, 0xBF,它位于文件的开头,用来表明该文件采用的是UTF-8编码。在C#编程中,有时我们需要在写入UTF-8文件时添加这个BOM头,以确保其他程序或系统能正确...
此文件用于快速反查php文件中的UTF8编码的文件是不是加了BOM,有则显示,无则跳过。(php源码)。 用途:主要用于整站所有文件为utf8无bom文件,个别文件却存bom,而造成的如:Warning: Cannot modify header information - ...
这个场景中,我们面临的挑战是如何正确处理UTF-8带有BOM(Byte Order Mark)的文件,因为BOM可能会导致文件内容显示为问号或者其他乱码。下面将详细介绍如何解决这个问题。 首先,我们需要理解什么是UTF-8的BOM。...
"CharsetConv"类提供了一个工具,帮助开发者在ANSI、Unicode(Little Endian和Big Endian)、UTF-8及UTF-8+BOM之间灵活转换,从而避免编码问题带来的困扰。通过深入学习和实践,开发者可以更好地应对各种编码挑战,...
BOM是UTF-8编码的一个可选特征,它在文件开头放置三个特殊的字节来标识文件的字符编码,但这可能会导致在某些编辑器或浏览器中出现不必要的字符或者乱码问题。因此,开发这个小工具是为了帮助开发者处理这个问题。 ...
Forcibly saves all files in UTF-8 (No BOM) encoding. ForceUTF8 的核心功能在于其智能识别并转换字符串编码的能力。即使字符串中混杂着多种编码,\ForceUTF8\Encoding::toUTF8() 都能成功将其转换为统一的UTF-8...
然后用 GB2UTF81.exe 这个工具批量去掉BOM(源文件格式选 utf8,目标文件也选utf8,去掉 带BOM 的勾,不保留备份,再点 开始处理 即可)。然后把目录复制,覆盖原来的目录文件即可。 注意: 本工具暂时还不支持清除...
去除bom头小工具,工具使用方法: 选择要遍历的文件夹,输入...勾选ANSI转为UTF-8,则会将相应格式但编码为GB2312,GBK,GB18030的文件转为无BOM的UTF-8文件 请确保文件可写!使用前请做好备份,作者不承担任何法律责任