我正在使用 Java 中的文件名列表。
我观察到文件名中的一些单个字符,例如 a、ö 和 ü 实际上由一个序列组成,您可以将其描述为两个单个 ASCII 字符:
ö
由 表示o
,¨
我通过检查看到这一点codePointAt()
。德语名称“Rölli”实际上是“Ro¨lli”:
...
20: R, 82
21: o, 111
22: ̈, 776
23: l, 108
24: l, 108
25: i, 105
...
¨
上面日志中的字符的值为 776,即“组合分音”。这是一个所谓的组合标记,属于字素,或者更确切地说属于组合变音符号。所以这一切都是有道理的,但我不明白是什么软件组件将这两个字符组合成一个变音符号,以及在哪里指定了这种行为。
- 这与强大的字符代码表使用几个字节作为内部表示这一事实无关。几个字节与两个组合字符不同。
- 任何简单
print()
的字符串都会向我显示组合字符,因此它既不是上面的某个 UI 层。 - 我记得用 PHP 也观察到了这一点。我想任何现代语言都可以处理这个问题。
什么组件导致组合字符显示为单个组合字符?这一切有多可靠?
Java是否有一种规范化方法,可以使组合代码点的单个代码点像这里一样?将有助于使用正则表达式...
非常感谢任何提示。