我有一个关于字符串规范化的问题,它已经得到了回答,但问题是,我无法正确规范需要 3 次击键
的韩文字符输入“ㅁㅜㄷ”(来自击键“ane”),它出现“무ㄷ”而不是“묻”。
输入“ㅌㅐㅇ”(来自击键“xod”),它会输出“태ㅇ”而不是“탱”。
这是迪恩先生的回答,虽然它适用于我最初给出的例子……但它不适用于我上面引用的例子。
如果您使用的是 .NET,则以下内容将起作用:
var s = "ㅌㅐㅇ";
s = s.Normalize(NormalizationForm.FormKC);
在本机 Win32 中,对应的调用是NormalizeString:
wchar_t *input = "ㅌㅐㅇ";
wchar_t output[100];
NormalizeString(NormalizationKC, input, -1, output, 100);
NormalizeString 仅在 Windows Vista+ 中可用。如果你想在 XP 上使用它,你需要安装“Microsoft Internationalized Domain Name (IDN) Mitigation APIs”(为什么它在 IDN 下载中,我不明白......)
请注意,这些方法实际上都不需要使用 IME - 无论您是否安装了韩语 IME,它们都可以工作。
这是我在 delphi 中使用的代码(使用 XP):
var buf: array [0..20] of char;
temporary: PWideChar;
const NORMALIZATIONKC=5;
...
temporary:='ㅌㅐㅇ';
NormalizeString(NORMALIZATIONKC , temporary, -1, buf, 20);
showmessage(buf);
这是一个错误吗?我的代码中有什么不正确的地方吗?代码是否在您的计算机上正确运行?用什么语言?你用的是什么windows版本?