UTF-8标准化形式的重音编码之间的冲突

时间:2010-08-24 09:35:35

标签: java linux encoding utf-8 filesystems

我有一个UTF-8规范化的错误:

据我所知,(至少)有两种方法可以用UTF-8编写'é':CC 81C3 A9

[从Mac / OSX迁移到PC / Linux之后]我现在在我的数据库中存储的路径和实际的文件系统结构之间存在冲突,这使我无法正确访问我的文件...

java.text.Normalizer的帮助下,我得知在FS中我得到了:

NFD true
NFC false
NFKD true
NFKC false

在数据库(和键盘)中,我有:

NFD false
NFC true
NFKD false
NFKC true

我应遵守这四种标准化表格中的哪一种? 我怎么能(自动)修复文件系统目录的编码?


EDIT2 :这个问题根本不是我在开始时的情况,因此下面的所有内容都会被删除。

<击> 你知道是否有任何规则(RFC?)定义file://网址的处理?

我关注的是口音,我试图访问

file:///other/Web/data/images/2005/2005-12-31 Fin d'ann&eacute;e/IMGP0012.JPG

但它不起作用, 编辑:当然它不适用于URL中的&eacute ...

然而,Gumbo的建议

file:///other/Web/data/images/2005/2005-12-31%20Fin%20d'ann%C3%A9e/IMGP0012.JPG

也不起作用,但是(Firefox-&gt;复制链接位置)

file:///other/Web/data/images/2005/2005-12-31%20Fin%20d%27anne%CC%81e

没关系。

有没有标准的方法来访问本地文件系统上的这些数据,或者我应该尝试所有可用的编码......?

(我的代码用Java编写,我用FF 3.6测试)

2 个答案:

答案 0 :(得分:4)

您需要使用percent-encoding对这些字符进行编码。试试这个:

file:///other/Web/data/images/2005/2005-12-31%20Fin%20d'ann%C3%A9e/IMGP0012.JPG

此处%C3%A9代表UTF-8编码的é。如果您的应用程序需要与UTF-8不同的字符编码,则可能需要更改字符编码。

答案 1 :(得分:1)

我终于'规范化'(重命名)我的文件系统目录,根据存储在数据库中的名称,OSX搞砸了所有内容!