我正在阅读从谷歌趋势下载的CSV文件,这里是在记事本中打开时的文件内容(仅限前两行):
法拉利法拉利(标准错误)
0.735 2%
当我使用readline读取文件时,行读取包含每个字符之间的空格,在上面的情况下输出为:
r r r r r r r r r(r t r r r o r)
0。 7 3 5 2%
(“ferrari”和“ferrari”之间有标签,介于0.735和2%之间,没有显示堆栈溢出)
每行末尾的换行符也会被读取两次。 为什么会这样?任何解决方案?
以下是我用来读取文件的代码:
BufferedReader Reader = new BufferedReader(new FileReader("trend.csv"));
String line = null;
while ((line = Reader.readLine()) != null)
System.out.println(line);
编辑:在文件开头
还读取了一些奇怪的字符Edut:得到了解决方案
这是编码问题,将第一行改为:
BufferedReader Reader = new BufferedReader(new InputStreamReader(new FileInputStream("trend.csv"), "UTF-16"));
答案 0 :(得分:14)
这是由于字符编码...我刚从趋势中下载文件并尝试过,它也遇到了同样的问题。
如果我使用UTF-16字符集,我就可以解决这个问题。
public class TrendReader
{
public static void main(String args[]) throws Exception
{
//BufferedReader Reader = new BufferedReader(new FileReader("trends.csv"));
BufferedReader Reader = new BufferedReader(new InputStreamReader(new FileInputStream("trends.csv"), "UTF-16"));
String line = null;
while ((line = Reader.readLine()) != null)
{
System.out.println(line);
}
}
}
答案 1 :(得分:0)
您需要检查文件的编码,并根据您在阅读文件时指定它:
BufferedReader Reader = new BufferedReader(new InputStreamReader(new
FileInputStream("trends.csv"), "UTF-8"));
如果您希望UTF-8中的文件然后更改文件的编码而不是代码,那么您可以使用任何开源CSV读取器(如OpenOffice)来读取此文件并在打开时指定编码:)