1

我必须使用 Java 读取 CSV 文件,并且我正在使用 Super CSV 库进行读取。如果我使用文本编辑器(在 Windows 或 linux 中)打开 CSV 文件,我可以看到如下一行:

6;;07/01/1939;58;22;47;49;69;  -   ;  -   ;  -   ;  -   ;  -   ;

似乎包含“ - ”的单元格在 Linux 上从 java 读取为“� - �”,在 Windows 上读取为“á - á”。我需要正确的表示,因为我必须进行比较。现在我正在初始化一个字符串变量=“\uFFFD - \uFFFD”(因为我是在linux上开发的),但是这段代码在windows上不起作用。

任何不同于首先读取文件以检查字符(当前文件无法拥有它)或基于操作系统初始化字符串(我将作为临时解决方案实施)的解决方案?

4

1 回答 1

2

您应该知道 CSV 文件的实际编码方式。

如果您在正确显示它的文本编辑器中打开它,您应该在该编辑器中找出使用了哪种编码。(例如,记事本++中的编码菜单项就是其中之一)。

比在 java 中阅读时可以指定它。

此处使用 utf-8 的示例:

FileInputStream fis = new FileInputStream("test.txt"); 
InputStreamReader in = new InputStreamReader(fis, "UTF-8");

或者

Scanner scanner = new Scanner(file, "UTF-8");

问题可能是在 windows 和 linux 上使用了不同的默认字符集。

(请参阅:http ://www.javapractices.com/topic/TopicAction.do?Id=42 ,其中声明:FileReader 和 FileWriter 类有点棘手,因为它们隐式使用系统的默认字符编码。

于 2013-02-26T15:29:52.163 回答