gpt4 book ai didi

java - 如何正确规范化具有复合字符的字符串?

转载 作者:太空狗 更新时间:2023-10-29 22:35:56 25 4
gpt4 key购买 nike

Java Normalize 已经允许我使用重音字符并输出非重音字符。但是,它似乎根本无法很好地处理复合字符(Œ、Æ)。

Java 有没有办法在本地处理这些字符?我想避免必须保留这些字符的 Map(因为这是我们首先转向使用 Normalize 的原因)。

例如,“Œ”的输入应该返回“OE”,就像它已经将“½”等字符巧妙地分解为“1/2”一样。

最佳答案

TLDR;不, native java 无法统一处理这些。

长答案

如本问题所述,Separating Unicode ligature characters , Java Normalizer实现不支持书面语言中存在的所有连字。

这是因为 Unicode 不支持书面语言中存在的所有连字。在书面语言的存储方面,连字是一个有争议的话题,因为有人认为从数据的角度来看它们不重要,而从布局的角度来看它们很重要。

数据观点声称没有信息丢失,因此只使用分解形式更有意义,组合形式不应采用 Unicode。

Layout 观点认为组合连字代表了书面语言的正确布局,因此应该用特殊代码在数据中表示。

可能的解决方案

我建议创建一个 Service它有一个只处理连字的接口(interface)。提供一个具体的实现来处理您当前需要的所有内容。将来,如果需要新的实现,只需将新的 JAR 添加到添加缺失连字的程序类路径中,即可轻松添加它们而无需修改原始代码。

框架实现可能如下所示。

请注意,我省略了实际使用 ServiceLoader 来定位 LigatureDecoderLigatureEncoder 实现的代码。

final class Ligatures {
public static CharSequence compose ( CharSequence decomposedCharacters );
public static CharSequence decompose ( CharSequence composedCharacters );
}

interface LigatureDecoder {
CharSequence decompose ( CharSequence composedCharacters );
}

interface LigatureEncoder {
CharSequence compose ( CharSequence decomposedCharacters );
}

关于java - 如何正确规范化具有复合字符的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48385080/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com