アプリ版:「スタンプのみでお礼する」機能のリリースについて

下のようなコードで読もうとしているんですが、どうしても文字化けしてしまいます。原因が何なのかさっぱりわかりません。。
分かる方どうかお願いします!開発環境はVC++.NETです。

FILE* fin;
wchar_t c;
CString ss;

if( (fin = fopen( "temp.txt", "r" )) == NULL ){
AfxMessageBox("temp.txtファイルオープンエラー");
exit(1);
}

fgetws( &c, 2, fin );
ss += c;
AfxMessageBox(ss);

A 回答 (5件)

fgetwsを呼び出す前に、setlocale(LC_CTYPE, "");を実行してください。



それともう一点、cは1文字しか格納できないのに、サイズに2を指定しているのは間違いです。

この回答への補足

回答ありがとうございます。
最初はサイズ1を指定していたんですが、
2にしないとなぜかうまく動かないので。。
マルチバイト文字のせいでしょうか?

>fgetwsを呼び出す前に、setlocale(LC_CTYPE, "");を実行してください。
必要な物はインクルードしたんですが、LC_CTYPEが未定義識別子になってしまいます。。

補足日時:2005/11/12 02:15
    • good
    • 0
この回答へのお礼

上記問題解決しました。直接int値入れました、、、が、、
解決しません。。

お礼日時:2005/11/12 02:52

もし、UTF-16のファイルを読もうとしているのであれば、fgetwsやfgetwcを使うのは不適当です。

これらの関数は、あくまでも多バイト文字で格納されたファイルを読み込むためのものだからです。

UTF-16を扱いたいのであれば、バイナリモードで読み込む必要があります。

この回答への補足

皆様ご助力ありがとうございました。
なんとか解決することができました。
お返事が遅くなって大変申し訳ないです。
これにて質問を締め切らせて頂きます。

補足日時:2005/11/13 15:19
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
文字コードはUnicodeです。

お礼日時:2005/11/13 15:18

参考情報ですが、16ビットユニコードテキストは先頭にBOMと呼ばれる識別子が挿入されます。


これはビッグエンディアンとリトルエンディアンを区別するためのものでFFEFまたはFFFEのいずれかになります。

http://www.atmarkit.co.jp/aig/01xml/bom.html

読み込んだデータの先頭にでてきている" FF FE "はこのBOMデータだとおもいますので読み飛ばして処理されるとよいかとおもいます。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
最初の2バイトはデータとは関係ないんですね。。
ありがとうございます!

お礼日時:2005/11/13 15:19

> 最初はサイズ1を指定していたんですが、


> 2にしないとなぜかうまく動かないので。。

fgetwsは文字列を読み込む関数だからです。文字を読み込むのであれば、fgetwcを使うとよいでしょう。

> 必要な物はインクルードしたんですが、LC_CTYPEが未定義識別子になってしまいます。。

<locale.h>をインクルードしましたか?

この回答への補足

夜分遅くにほんとうにありがとうございます。

>fgetwsは文字列を読み込む関数だからです。文字を読み込むのであれば、fgetwcを使うとよいでしょう。
こっちの方が引数が少なくて良いですね!

><locale.h>をインクルードしましたか?
しましたが、未定義のままでした。強引に整数入れて解決しましたが、原因はよく分かりません(汗

文字は相変わらずですが、少し進展?がありました。
プロジェクトの設定で文字コードを"Unicodeを使用する"にしたところ、
バイナリのFFがyの上にちょんちょんがついた文字でダイアログに出てきました。
CStringが、なにか悪さしてるんでしょうかねぇ。。。

補足日時:2005/11/12 03:02
    • good
    • 0

ファイル内のバイナリデータと、読み込み後の変数に格納されたバイナリデータを比較し、変数への格納自体はプログラムの意図どおり成功しているのか、それとも変数への格納自体に失敗しているのかをまず補足願います。

この回答への補足

ご回答ありがとうございます。
バイナリエディタで自動変数と比較したところ、
数値は合っていました。
FF FE 3C → 255 254 60
でした。ということはCStringへの代入がおかしいという事なんでしょうか。。

補足日時:2005/11/12 02:05
    • good
    • 0

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