ユーザが入力した文字のCodepageを調べたい

[戻る]
山本和弘 [E-Mail] 2009/12/13(日) 06:37:39
Windowsアプリに詳しい方教えてください!!

win32paiのMultiByteToWideCharを使ってUNICODEにする方法について調べているのですが
http://msdn.microsoft.com/ja-jp/library/cc448053.aspx

それで今、親WindowにEditとボタンを配置したアプリを作成し、
ボタンをクリックしたらエディットのテキストをUNICODEにしてファイルに書き出すよう
にしました。
自分の環境の日本語WindowsVistaではMultiByteToWideCharの第一パラメータに
932もしくは(定義済みのCP_ACPなど)を指定すればSJis→UNICODEになり、うまくいくこと
を確認しました。

で、ふと遊び心で、EditのフォントをKS Gothic、文字セットを「ハングル」にして韓国
語CP949でハングルを意味する
char hangeul[]={0xc7, 0xd1,0xb1,0xdb, 0x00};を入力。
MultiByteToWideCharの第一パラメータに949を指定していしたところ、うまくいきまし
た。

で、何が問題かといいますと、
システムロケールやスレッド(CP_THREAD_ACP)に設定されているコードページと
ユーザが実際に入力したテキストのコードページ
が異なる場合(稀とは思いますが)に、
ユーザが入力したテキストのコードページを取得する方法がわかりたいのです。

自分なりに考えたところ、Editにセットされているフォントからcharsetを割り出し、
charasetからCodepageを割り出す、という2段階が必要なのではないか?
(今回のように、HANGEUL_CHARSET(129)からCP949を割り出す変換マップが必要?)
ということなのですが、このアプローチで良いでしょうか?

επιστημη [E-Mail] [HomePage] 2009/12/13(日) 09:25:02
一意に決まりませんよ?

たとえば 'A' は asciiでもUTF-8でもiso-2022-jpでもeucでも同じ文字コードです。

山本和弘 [E-Mail] 2009/12/13(日) 14:39:05
すいません、ちょっと書き方がまずかったかも知れません。
文字('A' = 0x41)から文字コード(文字セット)を判別したいのではなく、
文字セットからコードページを判別したいと思ったんです。

なぜ、文字セットからなのとかと言うと、
文字セットならフォントから取得できますし、
フォントこそユーザが実際に入力した文字に直結すると考えたからです。

もちろん
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200603/06030016.txt
にあるように
Windows上にて
SHIFTJIS_CHARSET→SJIS(CP932)
HANGEUL_CHARSET→UHC(Unified Hangul Code)(CP949)
というように、一意に決められているという前提なのですが

επιστημη [E-Mail] [HomePage] 2009/12/13(日) 17:03:24
うーん...Editに入力された文字を取りだすとふつーUNICODEですよ?

山本和弘 [E-Mail] 2009/12/13(日) 22:17:20
[[解決]]
ちょっと自分でも言っていることに不明な点が出てきたので、一旦スレッドを終了しま
す。

επιστημηさん何度もも丁寧なレスありがとうございました

自分でもうちょっと調べてまた書き込みます!

古いスレッドには追加発言できません。