下のようなコードで読もうとしているんですが、どうしても文字化けしてしまいます。原因が何なのかさっぱりわかりません。。
分かる方どうかお願いします!開発環境は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);
No.2ベストアンサー
- 回答日時:
fgetwsを呼び出す前に、setlocale(LC_CTYPE, "");を実行してください。
それともう一点、cは1文字しか格納できないのに、サイズに2を指定しているのは間違いです。
この回答への補足
回答ありがとうございます。
最初はサイズ1を指定していたんですが、
2にしないとなぜかうまく動かないので。。
マルチバイト文字のせいでしょうか?
>fgetwsを呼び出す前に、setlocale(LC_CTYPE, "");を実行してください。
必要な物はインクルードしたんですが、LC_CTYPEが未定義識別子になってしまいます。。
No.5
- 回答日時:
もし、UTF-16のファイルを読もうとしているのであれば、fgetwsやfgetwcを使うのは不適当です。
これらの関数は、あくまでも多バイト文字で格納されたファイルを読み込むためのものだからです。UTF-16を扱いたいのであれば、バイナリモードで読み込む必要があります。
この回答への補足
皆様ご助力ありがとうございました。
なんとか解決することができました。
お返事が遅くなって大変申し訳ないです。
これにて質問を締め切らせて頂きます。
No.4
- 回答日時:
参考情報ですが、16ビットユニコードテキストは先頭にBOMと呼ばれる識別子が挿入されます。
これはビッグエンディアンとリトルエンディアンを区別するためのものでFFEFまたはFFFEのいずれかになります。
http://www.atmarkit.co.jp/aig/01xml/bom.html
読み込んだデータの先頭にでてきている" FF FE "はこのBOMデータだとおもいますので読み飛ばして処理されるとよいかとおもいます。
No.3
- 回答日時:
> 最初はサイズ1を指定していたんですが、
> 2にしないとなぜかうまく動かないので。。
fgetwsは文字列を読み込む関数だからです。文字を読み込むのであれば、fgetwcを使うとよいでしょう。
> 必要な物はインクルードしたんですが、LC_CTYPEが未定義識別子になってしまいます。。
<locale.h>をインクルードしましたか?
この回答への補足
夜分遅くにほんとうにありがとうございます。
>fgetwsは文字列を読み込む関数だからです。文字を読み込むのであれば、fgetwcを使うとよいでしょう。
こっちの方が引数が少なくて良いですね!
><locale.h>をインクルードしましたか?
しましたが、未定義のままでした。強引に整数入れて解決しましたが、原因はよく分かりません(汗
文字は相変わらずですが、少し進展?がありました。
プロジェクトの設定で文字コードを"Unicodeを使用する"にしたところ、
バイナリのFFがyの上にちょんちょんがついた文字でダイアログに出てきました。
CStringが、なにか悪さしてるんでしょうかねぇ。。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- その他(クラウドサービス・オンラインストレージ) Google ColabでGoogleドライブのサブフォルダにファイルを生成する方法 1 2022/10/31 17:37
- 画像編集・動画編集・音楽編集 DVD Styler トラブル解決方法 6 2022/10/29 16:00
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- PHP $filePath = './user_img/' . $file['name'];? 1 2022/12/10 07:29
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- Visual Basic(VBA) エクセルVBAでメールの自動作成の モジュールを作ったのですが、txtファイルから読み込んだ本文が文 2 2022/07/20 15:01
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでテキストファイルの改行を...
-
Cで2次元配列にCSVファイルを...
-
Unicodeのファイル読み込みがう...
-
テキストファイルを後ろから読...
-
[VBS] 16進数でバイナリファイ...
-
awk getlineをもう一度ファイル...
-
C言語でのファイル読み込み
-
C言語初心者です。 C言語のファ...
-
DXFファイルをVBで取り込み、図...
-
数値から画像を作りたい
-
fread関数の使い方がわかりませ...
-
バイナリデータの書き換え
-
ファイルのアクセス回数について
-
エクセルのプロパティーでセキ...
-
バッチファイル 二つ上のディ...
-
エクセルvbaでdocuworksprinter...
-
Wordで差込印刷した後に別々の...
-
カンマ区切りのCSVファイルから...
-
エクセルで複数のコメントのサ...
-
Excel 相対パス
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バイト型のデータを16進表記で...
-
VBAでテキストファイルの改行を...
-
テキストファイルを後ろから読...
-
VBAでテキストファイルを複数開...
-
バイナリファイルでOutOfMemory...
-
DXFファイルをVBで取り込み、図...
-
RGBのバイナリデータをCImageに...
-
CFileの使い方を教えてください
-
datagridviewでドラッグ操作が...
-
Excel VBAで画像解析
-
バイナリの読み込みから出力まで
-
bmpファイルの明暗の数値化の方法
-
fread関数の使い方がわかりませ...
-
SDKにて。
-
日本語を配列に収め、そして表...
-
バイナリ出力
-
VBSにてCSV読み込みし比較
-
ファイル内の(&H0A)を(&H0D0A)...
-
Cで2次元配列にCSVファイルを...
-
日本語混じりのファイルをラン...
おすすめ情報