BufferedReader方法ReadLine()将en-dash(“\ u2013”​​)转换为连字符(“\ u002D”)

时间:2012-11-02 06:34:23

标签: java svn bufferedreader

我在SVN的存储库中有文件夹,其名称中包含一个短划线(“\ u2013”​​)。 我首先调用“svn list”(在我的Windows 7 + UTF-8编码中)来获取目录列表。 在调用BufferedReader readLine()之后,它会读取列表的文本。 显示的文件夹名称包含连字符(“\ u002D”)而不是en-dash(“\ u2013”​​)。

对此有任何限制吗?

class Test {
    public static void main(String args[]) {
        BufferedReader br = null;
        try {
            String sCurrentLine;
            br = new BufferedReader(new FileReader("C:\\test–ing.xml"));
            System.out.println(br.readLine());
            while ((sCurrentLine = br.readLine()) != null) {
                System.out.println(sCurrentLine);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (br != null)
                    br.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    } // end main

1 个答案:

答案 0 :(得分:1)

这可能是问题所在:

br = new BufferedReader(new FileReader("C:\\test–ing.xml"));

那将使用平台默认编码。您已经说过该文件是UTF-8编码的 - 因此您需要指定您想要UTF-8,这意味着避免FileReader的API损坏:

br = new BufferedReader(new InputStreamReader(
             new FileInputStream("C:\\test–ing.xml"), "UTF-8"));

假设文件 是有效的UTF-8,包含预期的字符。在做其他事情之前,你应该检查一下。

或者,鉴于这是XML,我假设在您的实际代码中,您将使用作为 XML?如果是这样,我只是直接从输入流加载它,让XML解析器处理编码。