3

文字列の正規化について質問があり、すでに回答済みですが、問題は、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バージョンを使用していますか?

4

1 に答える 1

2
于 2010-06-29T08:55:35.400 に答える