2011-11-04 100 views
1

我正在阅读管道分隔文本从平面文件中,并有一个错误解析文本。我是一个古老的爪哇手,但几年来我没有碰过它。下面是代码:诊断Integer.parseInt()错误

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

感谢,在提前,

圭多

+2

那么这是奇怪的。在StackOverflow处理后,它显示了一大堆奇怪的问号。现在我**真的**认为这是编码。这些问号不会出现在标准输出显示中(在Netbeans 7.01中)。 –

+1

似乎你是正确的先生.. – Mechkov

+2

@GuidoAnselmi:像以往一样,要检查编码问题,请查看* binary *编辑器(或hexdump或其他)中的文本文件。我的猜测是它是UTF-16。 –

回答

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