我正在尝试分解一些文本。此处的示例:http://docs.oracle.com/javase/6/docs/api/java/text/Normalizer.html

  U+00C1    LATIN CAPITAL LETTER A WITH ACUTE (Á)


或作为两个单独的字符(“分解”形式):

  U+0041    LATIN CAPITAL LETTER A
  U+0301    COMBINING ACUTE ACCENT


我正在关注Oracle的本教程页面:http://docs.oracle.com/javase/tutorial/i18n/text/normalizerapi.html

这个简单的案例对我不起作用:


原始字词:"schön"
NFC:"schön"
NFD:"scho\u0308n"
NFKC:"schön"
NFKD:"scho\u0308n"


在上述所有情况下,函数Normalizer.normalize("schön", form)(其中形式为Normalizer.Form.NFCNormalizer.Form.NFD等之一),结果相同:"schön"

在Eclipse JDT中使用Linux上的Oracle JDK 1.6或1.7安装时,此代码不起作用。

String n = Normalizer.normalize("schön", Normalizer.Form.NFD);


结果n始终为“schön”。

这种“问题”的气味类似于(1)我完全误解了此功能,或者(2)恶劣的环境。我被困住了。有什么建议么?我的系统设置非常原始。

最佳答案

归功于@ R.MartinhoFernandes。我不知道结果将规范地等于输入。我今天学到了一些有关Unicode分解/合成的新知识。

简而言之:

String.valueOf('Á').equals(String.valueOf('\u00C1'))
String.valueOf('A').equals(String.valueOf('\u0041'))


和:

Normalizer.normalize("Á", Normalizer.Form.NFD).equals("\u0041\u0301")
!String.valueOf('Á').equals("\u0041\u0301")


但:

System.out.println("Á\u0041\u0301")


将打印:

ÁÁ

关于java - 简单的规范化文本示例不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17859114/

10-10 07:07