如何将代码页规范化为Unicode格式C,当变音符号在前面且重音不组合格式时

如何将代码页规范化为Unicode格式C,当变音符号在前面且重音不组合格式时,unicode,normalization,diacritics,unicode-normalization,Unicode,Normalization,Diacritics,Unicode Normalization,我想说的是“通过将变音重音转换成组合形式来规范这个字符串” 详细信息: 我的代码是用C语言开发的,但我不认为这个问题是特定于语言的 我的数据有两个问题(1)变音符号在该数据的基字符之前(需要在Unicode格式D或KD的基字符之后)。(2) 我的数据中的重音变音是希腊音调(U+0384),但需要组合形式(U+0301)才能正常化 我想以编程的方式来做这件事。我认为这种类型的操作应该是众所周知的,但我在C#Globalization方法中没有找到支持(有规范化方法,但没有办法将变音重音强制转换为它

我想说的是“通过将变音重音转换成组合形式来规范这个字符串”

详细信息:
我的代码是用C语言开发的,但我不认为这个问题是特定于语言的

我的数据有两个问题(1)变音符号在该数据的基字符之前(需要在Unicode格式D或KD的基字符之后)。(2) 我的数据中的重音变音是希腊音调(U+0384),但需要组合形式(U+0301)才能正常化

我想以编程的方式来做这件事。我认为这种类型的操作应该是众所周知的,但我在C#Globalization方法中没有找到支持(有规范化方法,但没有办法将变音重音强制转换为它们的组合形式)。

我认为C#Globalization方法在这方面帮不了你。正如您所指出的,问题在于U+0384不是组合字符。它本身就是一个角色。这也可以从相容性分解(到U+0020 U+0301)中看出。数据集很可能来自一个在下一个字符上将音调显示为变音符号的源。根据unicode规范,这不是“正确的”。因此,您必须自己转换数据。我遇到了一个与撇号类似的问题;有时应用程序正在使用正确的引号

数据转换并不难,我相信你可以编写代码。 我将有一个有状态的转换器,并通过流传输数据。当检测到U+0384时,它不会被触发。您将坚持“tonos”状态,并在下一个字符后发射U+0301。这些是要处理的错误条件(U+0384运行,数据结束处于“tonos”状态)。 这些数据可以用常用的API规范化。 祝你好运