栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

读取文件时找不到零宽度无间隔

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

读取文件时找不到零宽度无间隔

0xEF 0xBB 0xBF
是UTF-8
BOM,
0xFE 0xFF
是UTF-16BE
BOM和
0xFF 0xFE
是UTF-16LE
BOM。如果
0xFEFF
在字符串的开头存在,则表示您已创建带有BOM的UTF编码文本文件。UTF-16
BOM可以原样显示
0xFEFF
,而UTF-8
BOM只会显示
0xFEFF
BOM本身已从UTF-8解码为UTF-16(这意味着读者可以检测到BOM,但不会跳过)。
。实际上,众所周知Java不处理UTF-8 BOM(请参见Bug
JDK-4508058和JDK-6378911)。

如果您阅读该

FileReader

文档,它将显示:

此类的构造函数假定默认字符编码和默认字节缓冲区大小是适当的。要自己指定这些值,请在FileInputStream上构造一个InputStreamReader。

您需要使用一种识别字符集的阅读器来读取文件内容,最好是一种能够为您阅读BOM并根据需要在内部进行调整的阅读器。但更糟糕的情况是,您可以自己打开文件,读取前几个字节以检测是否存在BOM表,然后使用适当的字符集构造读取器以读取文件的其余部分。这是一个使用此功能的示例

org.apache.commons.io.input.BOMInputStream

String defaultEncoding = "UTF-8";InputStream inputStream = new FileInputStream(someFileWithPossibleUtf8Bom);try {    BOMInputStream bOMInputStream = new BOMInputStream(inputStream);    ByteOrderMark bom = bOMInputStream.getBOM();    String charsetName = bom == null ? defaultEncoding : bom.getCharsetName();    InputStreamReader reader = new InputStreamReader(new BufferedInputStream(bOMInputStream), charsetName);    //use reader} finally {    inputStream.close();}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/570897.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号