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