【发布时间】:2014-06-17 09:41:15
【问题描述】:
我正在尝试从 ftp 文件夹下载内容。有一个以标准化 xml 代码开头的 xml 文件。
< ?xml version="1.0" encoding="utf-8"?>
当我读取这些文件(使用 java.net.Socket)并获取输入流然后尝试转换为字符串时,不知何故我得到了一些新字符。整个 xml 文档以“?”开头例如。 "?....."
BufferedInputStream reader = new BufferedInputStream(sock.getInputStream());
然后我使用以下代码从该阅读器获取一个字符串。
StringBuilder sb = new StringBuilder();
String line;
BufferedReader br = new BufferedReader(new InputStreamReader(reader));
while ((line = br.readLine()) != null) {
sb.append(line);
}
System.out.println ("sb.toString()");
不确定这里发生了什么。为什么我要介绍一些特殊的字符?任何建议将不胜感激
然后我只是使用以下代码读取文件并在控制台中看到一些特殊字符
BufferedReader reader = new BufferedReader(new FileReader("c:/Users/appd922/DocumentMeta06122014.xml"));
StringBuffer sb = new StringBuffer();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line);
}
String output = sb.toString();
System.out.println("reading from file"+output);
我开始输出了 “正在读取文件
我从哪里得到这些特殊字符?
注意-忽略上面给出的 xml 文件行中的空格。如果没有那个空格,我不能用适当的 xml 在这里写。
【问题讨论】:
-
如果文件已使用 UTF-8 编码正确读取,前三个字节将被读取为单个 byte order mark 字符,'\ufeff',一个特殊的 Unicode 字符,专门用于文本文档中的第一个字符,软件可以使用它来确定文档的整体编码(包括字节顺序,如果使用 UTF-16 或 UTF-32)。在您的情况下,它显示为三个字符“”,因为您使用 FileReader 使用系统的默认字符集,该字符集假定每个字节是一个字符。
-
是否适合将 BOM 包含在带有 prolog 的 xml 文档中?