java - UTF-8 规范化重音编码形式之间的冲突

标签 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

但它不起作用, 编辑:当然它不适用于 &eacute在网址中……

不过,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/

相关文章:

java - 如何将数据从 FoxPro 迁移到 MySQL

linux - Linux 中移动应用程序的 RESTful API 开发指南

regex - SED 中的多行替换

c# - FileUpload 服务器控件和 unicode 字符

java - jdbc mysql连接

java - 从另一个 Activity 停止/启动媒体播放器

linux - 如何在 Windows 中执行此 linux 命令?

java - 使用声明的编码 = utf-8 从 xml 中删除非 UTF-8 字符 - Java

ios - 使用 AudioConverter 进行 AAC 编码并写入 AVAssetWriter

java - 无法将 .xslt 编译成 java 类文件