我有一个 UTF-8 规范化的错误:
据我所知,(至少)有两种方法可以用 UTF-8 编写 'é':CC 81
和 C3 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ée/IMGP0012.JPG
但它不起作用, 编辑:当然它不适用于 é
在网址中……
不过,Gumbo的建议
file:///other/Web/data/images/2005/2005-12-31%20Fin%20d'ann%C3%A9e/IMGP0012.JPG
也不起作用,但是(Firefox->复制链接位置)
file:///other/Web/data/images/2005/2005-12-31%20Fin%20d%27anne%CC%81e
没问题。
是否有任何标准方法可以访问本地文件系统上的这些数据,或者我应该尝试所有可用的编码...?
(我的代码是用Java写的,我用FF 3.6测试过)
罢工>
最佳答案
您需要使用 percent-encoding 对这些字符进行编码.试试这个:
file:///other/Web/data/images/2005/2005-12-31%20Fin%20d'ann%C3%A9e/IMGP0012.JPG
这里的%C3%A9
代表UTF-8编码的é
。如果您的应用程序需要与 UTF-8 不同的字符编码,您可能需要更改字符编码。
关于java - UTF-8 规范化重音编码形式之间的冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3555170/