我正在从平面文件中读取管道分隔文本,并且在解析文本时出错。我是一个古老的Java手,但我几年没有触及它。这是代码:
String zipString = tokenizerForOneLine.nextToken();
System.out.println( "Zip String: -->" + zipString + "<--");
//zipString = "18103"; <<<This works!!!
int zipInt = Integer.parseInt( zipString );
aProvider.setZipCode( zipInteger );
这是输出:
Zip String: -->�1�8�1�0�3�<--
java.lang.NumberFormatException: For input string: "�1�8�1�0�3�"
NumberFormatException while reading file.
Detailed Message: For input string: "�1�8�1�0�3�"
我天真的猜测是它是一个编码问题。这可能吗?对我来说完全是无稽之谈。或者我正在做一些非常愚蠢的事情,只是看不到它?
如何诊断编码问题? (我的数据供应商声称它是标准的UNICODE)。
由于式提前,
圭
答案 0 :(得分:6)
确保使用正确的编码构建阅读器。您的代码应该是这样的:
BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream("data.csv"), encoding));
String line;
while ((line = in.readLine()) != null) {
StringTokenizer tokenizer = new StringTokenizer(line, "|");
...
}
编码可能是UTF-16。
此外,如果文件具有字节顺序标记,则可以使用Commons IO中的BOMInputStream
自动检测编码。
http://commons.apache.org/io/api-release/org/apache/commons/io/input/BOMInputStream.html