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を割り出す変換マップが必要?)
ということなのですが、このアプローチで良いでしょうか?
一意に決まりませんよ?
たとえば 'A' は asciiでもUTF-8でもiso-2022-jpでもeucでも同じ文字コードです。
すいません、ちょっと書き方がまずかったかも知れません。
文字('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)
というように、一意に決められているという前提なのですが
うーん...Editに入力された文字を取りだすとふつーUNICODEですよ?
ちょっと自分でも言っていることに不明な点が出てきたので、一旦スレッドを終了しま
す。
επιστημηさん何度もも丁寧なレスありがとうございました
自分でもうちょっと調べてまた書き込みます!