读取流时java编码问题

时间:2014-06-17 00:52:59

标签: java encoding ftp

我正在尝试从ftp文件夹下载内容。有一个xml文件以标准xml代码开头。

< ?xml version="1.0" encoding="utf-8"?>

当我读取这些文件(使用java.net.Socket)并获取输入流然后尝试转换为String时,不知怎的,我得到了一些新的字符。整个xml文档以'?'开头例如。 “?&lt;?xml version =”1.0“encoding =”utf-8“?&gt; .....”

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);

我开始输出了 “从文件中读取»¿&lt;?xml版本.....

我在哪里获得这些特殊字符?

注意 - 忽略上面给出的xml文件行中的空格。我不能用适当的xml写这个空格。

2 个答案:

答案 0 :(得分:1)

在创建InputStreamReader时指定编码以从ftp读取文件,例如:

BufferedReader br = new BufferedReader(new InputStreamReader(reader, "utf-8"));

否则,InputStreamReader使用默认编码。另外,在读取下载的文件时指定编码。 FileReader使用默认平台编码。使用InputStreamReader并指定编码,例如:

BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), "utf-8"));

答案 1 :(得分:1)

这些字符称为BOM,字节顺序标记。如果将InputStreamReader的编码设置为“UTF-8”,您可以看到它们被解释为单个字符,即BOM字符。

不幸的是,你必须自己处理这个角色,因为Java不会为你做这件事:java utf-8 and bom。通常你只是剥离你的流。祝你好运。