ファイルの読み出しが文字化け
-
とく
ファイルの読み出しが文字化け
あるファイルのパスをファイルに書き込み保存して、あるタイミングで読み出したいのですが、「蓮」という字をReadFile関数を使用して読み出すときに文字化けしてしまいます。なぜかファイルに書き込むのはうまくいっています。対策はありますか?よろしくお願いします。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: ファイルの読み出しが文字化け
できるだけシンプルにした問題が再現するソースコードを見せて頂けますか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
とく
Re: ファイルの読み出しが文字化け
こちらがRead
こちらがWrite DirPathにファイルの場所の文字列が入っています。
こんな感じでよろしいでしょうか?
GetOpenFileName関数をつかって、その後テキストボックスに文字列を入れるときは「蓮」の字が入るのですが
その後に上の手順で保存し、プログラムを終了→プログラム開始→ファイルを読み込む→テキストボックスに文字列を入れる
とやると「蓮」の文字が文字化けしてしまします。
TCHAR TempPath[MAX_PATH]={0};
DWORD FileSize,temp,PathSize;
hFile = CreateFile(DirPath, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );
if(hFile == INVALID_HANDLE_VALUE){
MessageBox::Show( "ファイルを開くことが出来ません。","ファイルオープンエラー");
Close();
}
FileSize = GetFileSize(hFile,NULL)+1;
TCHAR *heap = (TCHAR *)malloc(sizeof(TCHAR)*FileSize);
TCHAR *p_heap=heap;
ZeroMemory(heap,FileSize);
ReadFile(hFile,heap,FileSize,&temp,NULL);
CloseHandle(hFile);
こちらがWrite DirPathにファイルの場所の文字列が入っています。
TCHAR WritePath[sizeof(ExePath)+100];
HANDLE hFile2;
DWORD SizeData;
int flag;
wsprintf(WritePath,"%s@%s",ExePath[0],ExePath[1]);
hFile2 = CreateFile(DirPath, GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );
if(hFile2 == INVALID_HANDLE_VALUE){
MessageBox::Show( "ファイルを開くことが出来ません。","ファイルオープンエラー");
Close();
return;
}
flag=WriteFile(hFile2,WritePath,lstrlen(WritePath),&SizeData,NULL);
if(flag==NULL){
MessageBox::Show( "ファイルの書き込みに失敗しました。","ファイル書き込みエラー");
}
CloseHandle(hFile2);
GetOpenFileName関数をつかって、その後テキストボックスに文字列を入れるときは「蓮」の字が入るのですが
その後に上の手順で保存し、プログラムを終了→プログラム開始→ファイルを読み込む→テキストボックスに文字列を入れる
とやると「蓮」の文字が文字化けしてしまします。
Re: ファイルの読み出しが文字化け
あまり詳しくは知りませんが、「蓮」の字の2バイト目には @ が含まれているため、
wsprintfのフォーマット"%s@%s"に引っかかっている可能性があります。
wsprintfのフォーマット"%s@%s"に引っかかっている可能性があります。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: ファイルの読み出しが文字化け
プロジェクトの構成のプロパティで文字セットはマルチバイト文字 or UNICODE文字のいずれでしょうか?
こちらで再現しないと的確なアドバイスが難しいので、出来ればそのまま動く形に整形したソースコードをお願いします。
こちらで再現しないと的確なアドバイスが難しいので、出来ればそのまま動く形に整形したソースコードをお願いします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
とく
Re: ファイルの読み出しが文字化け
@が引っかかっているかもしれないということで別の文字を試してみたところ!でうまくいきましたがなぜでしょうかね?
文字セットはマルチバイト文字です。
ソースコードは結構な量があるため難しいです。すいません。
文字セットはマルチバイト文字です。
ソースコードは結構な量があるため難しいです。すいません。
Re: ファイルの読み出しが文字化け
wsprintf(WritePath,"%s@%s",ExePath[0],ExePath[1]);
は
wsprintf(WritePath,TEXT("%s@%s"),ExePath[0],ExePath[1]);
でないといけないのでは?
は
wsprintf(WritePath,TEXT("%s@%s"),ExePath[0],ExePath[1]);
でないといけないのでは?