一回も披露したことのない豆知識

VC++で日本語(マルチバイト)の文字が含まれているファイルを読み込もうと思っています。

例えばunicodeのファイルとして下記の内容があるとして、
11111
abcdef
いろはにほへと

このファイルから1文字ずつ読み込みたいのですが、ヘルプで調べたところfgetwc関数でマルチバイトの読み込みができるということを調べました。
ファイルのオープンは_wfopenを使用しているのですが、テキストモード・バイナリモードでどちらで開いても、fgetwc関数の戻りはファイルを1byte読んだ結果を返します。

半角文字の場合は"1"とか"a"を単純に呼んで、マルチバイト文字であれは"い"とか"ろ"というデータを読み込みたいのですが、どうすればいいでしょうか?

A 回答 (3件)

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 などで確認されるとよろしいかと思います。
    • good
    • 0

> では、SJISとかだとマルチバイトなので、半角文字は1byte、全角文字は2byteだと思うので、そのような場合はどうすればいいのでしょうか?



まず1byte読めば、それが'半角'か'全角の前半分'かが判別できるはず。後者なら残る1byteを読めばいい。
    • good
    • 0

UNICODEで書かれたテキスト・ファイルであれば、


半角/全角にかかわらずどれも1-word(2byte)なので
なにも考えずに2byteずつ読めばいいはず。

この回答への補足

たしかにunicodeなら半角文字もすべて2byteで表現するため、そのまま2byte単位で読み込めばいいですね。

では、SJISとかだとマルチバイトなので、半角文字は1byte、全角文字は2byteだと思うので、そのような場合はどうすればいいのでしょうか?

補足日時:2004/03/05 09:47
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報