提问者:小点点

ApachePOI或java.io是否支持非英语字符?


我使用ApachePOI从Excel文件读取以获取docx、文档、xls和xlsx文件的路径,解密文件内容并构建新路径以读取数据。

现在的问题是当path具有法语字符时,如下所示:

/Valérie/CASES.doxcs
is = new FileInputStream(path);

此行将有以下例外:

(No such file or directory)
at java.io.FileInputStream.open(Native Method)

它适用于其他路径,这是否意味着ApachePOI不支持非英语字符或其他错误?无论如何要解决这个问题?


共2个答案

匿名用户

由于这是操作系统问题,您可以转换路径:

static String toFileName(String name) {
    return java.text.Normalizer.normalize(name, Form.NFKD)
            .replaceAll("\\P{ASCII}", ""); //.replaceAll("[\"/\\]", "_");
}

上面会将é转换为e等等,方法是将重音字母拆分为基本字母加重音。可能有更好的音译。并考虑西里尔字母和其他脚本。

一个更好的解决方案是迁移到UTF-8的Linux系统。您可能仍然希望将重音使用规范化为一种独特的形式,例如最短的字符序列:

static String toFileName(String name) {
    return java.text.Normalizer.normalize(name, Form.NFKC);
}

匿名用户

如何在Java中打开包含重音的文件?。尝试了此链接上的所有内容。对于大多数情况,Eclipse窗口中的配置-

但是如果你JDK不是SUN,你在linux系统中。你最好回显$LANG,确保它UTF-8,然后通过linux命令行编译并运行javasrc代码。问题解决了。java代码链接在linux中运行:http://www.sergiy.ca/how-to-compile-and-launch-java-code-from-command-line/