• 締切済み

Unicode

先日は文字コードについて色々助言してくださりありがとうございました。 おかげさまでJIS,EUC,SJISの変換はできましたが、 Unicodeについて詰まっているところがあります。 SJIS→UnicodeはSJISにあったU+XXXXに変換し、 それを1~4バイトにさらに変換して文字表記されることで出来ます。 後者の1~4バイトにさらに変換するやり方は出来ているのですが、 前者のSJISにあったU+XXXXに変換するところで詰まっています。 ##SJIS Unicode Name Note 0x00 U+0000 # <control> 0x01 U+0001 # <control> 0x02 U+0002 # <control> 0x03 U+0003 # <control> 0x04 U+0004 # <control> 0x05 U+0005 # <control> 0x06 U+0006 # <control> 0x07 U+0007 # <control> : : こういった変換表(テキストファイル)があるのですが、 どのようにしたらこのファイルをプログラム上で操作? できるのでしょうか? 例)SJISで0x07→U+0007→1~4バイト変換の 0x07→U+0007部分についてです。 また、逆に変換する際の0x07←U+0007についても わからないでいます。 何かヒントをください。

みんなの回答

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

参考URLに解説でてるんですがねぇ・・・ 以下はコーディング例です。 #include<windows.h> /** SHIFT-JISの文字列をUniCodeに変換し、その領域のポインタを返す   返されたポインタは使用後、free()で解放すること */ static LPWSTR sjis_uni(LPSTR sjis) {   size_t size = MultiByteToWideChar(CP_ACP,0,sjis,-1,NULL,0);   LPWSTR p = (LPWSTR)malloc(size << 1);   MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,sjis,-1,p,size);   return p; } /** UniCodeの文字列をSHIFT-JISに変換し、その領域のポインタを返す   返されたポインタは使用後、free()で解放すること */ static LPSTR uni_sjis(LPWSTR uni) {   size_t size = WideCharToMultiByte(CP_ACP,0,uni,-1,NULL,0,NULL,NULL);   LPSTR p = (LPSTR)malloc(size);   WideCharToMultiByte(CP_ACP,0,uni,-1,p,size,NULL,NULL);   return p; } //-----   LPSTR sj = read(); //ファイルからSHIFT-JIS読み込み   LPWSTR uc = sjis_uni(sj); //UniCodeに変換   write(uc); //ファイルに書き込み   free(uc); //メモリ解放 //-----   LPWSTR uc = read(); //ファイルからUniCode読み込み   LPSTR sj = uni_sjis(uc); //SHIFT-JISに変換   write(sj); //ファイルに書き込み   free(sj); //メモリ解放 read()、write()は架空の関数です。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

MultiByteToWideCharやWideCharToMultiByteは使っていないのですか? http://msdn.microsoft.com/ja-jp/library/cc448053.aspx http://msdn.microsoft.com/ja-jp/library/cc448089.aspx

hardtechno
質問者

補足

使っていません。 前回アドバイスいただきましたが、それらの関数の使い方も よくわからなかったので、原始的な方法でやってます。 今回のはファイルとして読みだして、0xYYを検索し、 該当するU+YYYYを抽出(うまくできるかな??)しようと 思っていますが、まだじっくりとは考えていません。

関連するQ&A