诊断Integer.parseInt()错误

Gui*_*lmi 1 java parsing

我正在从平面文件中读取管道分隔文本,并且在解析文本时出错.我是一个古老的Java手,但我几年没有触及它.这是代码:

        String zipString = tokenizerForOneLine.nextToken();
        System.out.println( "Zip String: -->" + zipString + "<--");
        //zipString = "18103"; <<<This works!!!
        int zipInt = Integer.parseInt( zipString );
        aProvider.setZipCode( zipInteger );
Run Code Online (Sandbox Code Playgroud)

这是输出:

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?"
Run Code Online (Sandbox Code Playgroud)

我天真的猜测是它是一个编码问题.这可能吗?对我来说完全是无稽之谈.或者我正在做一些非常愚蠢的事情,只是看不到它?

如何诊断编码问题?(我的数据供应商声称它是标准的UNICODE).

提前致谢,

圭多

Emm*_*urg 6

确保使用正确的编码构建阅读器.你的代码应该是这样的:

    BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream("data.csv"), encoding));
    String line;
    while ((line = in.readLine()) != null) {
        StringTokenizer tokenizer = new StringTokenizer(line, "|");

        ...
    }
Run Code Online (Sandbox Code Playgroud)

编码可能是UTF-16.

此外,如果文件具有字节顺序标记,则可以使用BOMInputStreamfrom Commons IO自动检测编码.

http://commons.apache.org/io/api-release/org/apache/commons/io/input/BOMInputStream.html