我正在尝试分解一些文本。此处的示例: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.NFC
,Normalizer.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/