- 締切済み
VC++で日本語(マルチバイト)ファイルの読み込み
VC++で日本語(マルチバイト)の文字が含まれているファイルを読み込もうと思っています。 例えばunicodeのファイルとして下記の内容があるとして、 11111 abcdef いろはにほへと このファイルから1文字ずつ読み込みたいのですが、ヘルプで調べたところfgetwc関数でマルチバイトの読み込みができるということを調べました。 ファイルのオープンは_wfopenを使用しているのですが、テキストモード・バイナリモードでどちらで開いても、fgetwc関数の戻りはファイルを1byte読んだ結果を返します。 半角文字の場合は"1"とか"a"を単純に呼んで、マルチバイト文字であれは"い"とか"ろ"というデータを読み込みたいのですが、どうすればいいでしょうか?
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- mcWalker
- ベストアンサー率69% (27/39)
SJIS文字コード表はありませんか。 SJIS文字の第1バイトは、0x81 - 0x9F または、0xE0 - 0xFC, 第2バイトは、0x40 - 0x7E または、0x80 - 0xFC です。 因みに、半角カタカナは、0xA1 - 0xDF です。 残りは、ASCII で、ANSI の判定関数があります。 方眼紙に第1バイトと第2バイトを縦横に書いて、塗りつぶし 見てください。 尚、読みこんだ1バイトが int に格納される場合、一旦 0xFF でマスクして、上記の定数と比較すると安心です。 また、SJIS <-> unicode 変換の API がありますので、 MSDN などで確認されるとよろしいかと思います。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
> では、SJISとかだとマルチバイトなので、半角文字は1byte、全角文字は2byteだと思うので、そのような場合はどうすればいいのでしょうか? まず1byte読めば、それが'半角'か'全角の前半分'かが判別できるはず。後者なら残る1byteを読めばいい。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
UNICODEで書かれたテキスト・ファイルであれば、 半角/全角にかかわらずどれも1-word(2byte)なので なにも考えずに2byteずつ読めばいいはず。
補足
たしかにunicodeなら半角文字もすべて2byteで表現するため、そのまま2byte単位で読み込めばいいですね。 では、SJISとかだとマルチバイトなので、半角文字は1byte、全角文字は2byteだと思うので、そのような場合はどうすればいいのでしょうか?