文字列の正規化について質問があり、すでに回答済みですが、問題は、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は、WindowsVista+でのみ使用できます。XPで使用する場合は、「Microsoft国際化ドメイン名(IDN)軽減API」をインストールする必要があります(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バージョンを使用していますか?