Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java读取cyrrilic CSV文件,编写奇怪字符_Java_Csv_Encoding - Fatal编程技术网

Java读取cyrrilic CSV文件,编写奇怪字符

Java读取cyrrilic CSV文件,编写奇怪字符,java,csv,encoding,Java,Csv,Encoding,这是我的java代码 (且整个项目采用UTF-8编码) 这就是输出 而不是 ул. 例如,“аааааааааааааа1072 我得到: ��. ���������, ��. ����� ��������� ����� � 它可能与CSV文件的编码有关,但我不确定如何查看/更改该文件,以及是否应该使用Word或Open Office 此外,我是否可以更改Java读取此类文件的方式,以便即使它们采用错误的编码,Java也可以修复它们?这很可能是问题所在: CSVReader reader = n

这是我的java代码

(且整个项目采用UTF-8编码)

这就是输出

而不是 ул. 例如,“аааааааааааааа1072

我得到: ��. ���������, ��. ����� ��������� ����� �

它可能与CSV文件的编码有关,但我不确定如何查看/更改该文件,以及是否应该使用Word或Open Office


此外,我是否可以更改Java读取此类文件的方式,以便即使它们采用错误的编码,Java也可以修复它们?

这很可能是问题所在:

CSVReader reader = new CSVReader(new FileReader(filepath));
FileReader
始终使用平台默认编码。我更喜欢使用
InputStreamReader
包装在
FileInputStream
周围,这样您就可以指定编码:

try (InputStream stream = new FileInputStream(filepath)) {
    CSVReader reader = new CSVReader(new InputStreamReader(stream, "UTF-8"));
    ...
}

这很可能就是问题所在:

CSVReader reader = new CSVReader(new FileReader(filepath));
FileReader
始终使用平台默认编码。我更喜欢使用
InputStreamReader
包装在
FileInputStream
周围,这样您就可以指定编码:

try (InputStream stream = new FileInputStream(filepath)) {
    CSVReader reader = new CSVReader(new InputStreamReader(stream, "UTF-8"));
    ...
}

您可以像这里这样显式地设置编码


new CSVReader(新的InputStreamReader(新的FileInputStream(filePath),编码))

您可以像这里这样显式设置编码


new CSVReader(新的InputStreamReader(新的FileInputStream(filePath),编码))

我这样做了,但输出是相同的:(可能是文件的编码吗?@J.Kowalski:是的-我写上述内容时假设它真的是UTF-8。您需要找出文件的编码,并确保指定该编码作为
InputStreamReader
的第二个参数。嗯,文件有另一种编码。最糟糕的是,我将编码改为UTF-8和al。)因此,按照您建议的方式编写代码,我仍然得到相同的输出。实际上,我通过使用notepad.exe打开文档并在其中更改编码来解决此问题。看起来Excel的编码更改没有成功。我这样做了,但输出是相同的:(可能是文件的编码吗?@J.Kowalski:是的-我写上述内容时假设它真的是UTF-8。您需要找出文件的编码,并确保指定该编码作为
InputStreamReader
的第二个参数。嗯,文件有另一种编码。最糟糕的是,我将编码改为UTF-8和al。)因此,按照您建议的方式编写代码,我仍然得到相同的输出。实际上,我通过使用notepad.exe打开文档并在其中更改编码来解决这个问题。看起来Excel更改编码没有成功。