【发布时间】:2013-09-05 15:00:03
【问题描述】:
我正在尝试在 Mac OS 上解析 iTunes XML 库文件。
在 iTunes 文件中我有这个字符串:
<key>Location</key>
<string>file://localhost/home/user/Downloads/album/01%C4%2024%5F7%20%28Intro%29%20&.mp3</string>
如您所见,它似乎是 URL 编码的。现在,下一步是在文件系统上查找并读取此文件,但似乎我找不到使用 Java 或 Ruby 的合适方法。
我的主要目标是在 Java 中做到这一点,但为了简单起见,我在 Ruby 中尝试了这个:
2.0.0p247 :003 > URI.decode(str)
=> "file://localhost/home/user/Downloads/album/01\xC4 24_7 (Intro) &.mp3"
2.0.0p247 :004 > CGI.unescape(str)
=> "file://localhost/home/user/Downloads/album/01\xC4 24_7 (Intro) &.mp3"
文件在文件管理器中显示为/home/user/Downloads/album/01Ä 24_7 (Intro) &.mp3
Java:
path = URLDecoder.decode( originalPath, "ISO-8859-1" );
--
path = URLDecoder.decode( originalPath, "UTF-8" );
--
path = new java.net.URI(originalPath).getPath();
但我无法在代码中使用生成的 path 找到文件。 exists() 或 isFile() 始终为 false,尽管在调试器中路径显示正确。
我应该如何进行?
遗憾的是,我不是从操作系统中获取文件名,而是从 XML 文件中获取。我遇到了一个长期存在的 JVM 错误吗?
- How can I open files containing accents in Java?
- How to fix java when if refused to open a file with special charater in filename?
将 JVM 设置为特定的语言环境是不可接受的,因为我不需要只打开用户语言环境中的文件。
【问题讨论】:
-
首先,数字实体引用
&#38;应该在XML解析器中变成&。您使用的是哪个解析器? -
我正在使用 SAXParser 读取文件:github.com/codercowboy/iTunesUtilities/blob/master/src/com/… 并取回位置。
标签: java ruby utf-8 utf8-decode