1

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

1 回答 1

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 解析器处理编码。

于 2012-11-02T06:50:12.760 回答