トップページ > 記事閲覧
文字コードを変換してテキストファイルのテキストを表示したい
名前:itohii 日時: 2020/09/24 02:27

1.system("1234.txt"); でメモ帳開く 2.1234.txt にテキスト入力し、保存。メモ帳閉じる 3.その内容をFileRead_getsなどで読み込む 4.読み込んだテキストをDrawStringToHandleで描画する この一連の処理を行いたいのですが、これだと 4.の時に文字化けがあったりなかったりが発生してしまいます。 例:差し傷 → 蟾ョ縺怜す   差し入れ → 差し入れ 2と3の間に ・テキストがUtf-8なので、Shift-8に変換する という処理を入れたいです。 FileRead_set_format()やConvertStringCharCodeFormat()あたりを使えばいいのかなと思っているのですが 思うようにいかないです。 設定や確認したこと ・systemで起動されたメモ帳の文字コード表示 → UTF-8 ・Visual Studioでのプロジェクトのプロパティの文字セット → 「マルチバイト文字セットを使用する」 ・GetUseCharCodeFormat を実行 → 932 DX_CHARCODEFORMAT_SHIFTJIS
メンテ

Page: 1 |

Re: 文字コードを変換してテキストファイルのテキストを表示したい ( No.1 )
名前:itohii 日時:2020/09/24 13:29

追記 で、過去質問でもあるように SetUseCharCodeFormat( DX_CHARCODEFORMAT_UTF8 ); を最初の方に実行すればいいのではと思いましたが、 同様に文字化けが起こりました。 どのようにしたらよろしいでしょうか…。すみませんご教授お願い致します。
メンテ
Re: 文字コードを変換してテキストファイルのテキストを表示したい ( No.2 )
名前:たろう 日時:2020/09/24 17:25

すみません、お望みのものとは違うかもしれませんが 私が使っているテキスト読込&書き込みの仕組みです。 必要な部分を改造すれば希望の動作が得られると思います<(_ _)> @test1.txtのテキストファイルを作って、適当に改行を含めて25行書き込みます A下のプログラムでそれを読みこみます Bウィンドウをクリックするとtest2.txtが産まれていると思いますのでその内容を確認してください Ctest1.txt test2.txtの内容が同じであれば成功です ※追記:忘れていました。.CPPや.hのファイル自体をUTF-8 シグネチャ(BOM)付きで保存する必要があります → ttps://dxlib.xsrv.jp/lecture/Android/Android_CharCode.html#R5 -------------------------------------------------------------------- #define _CRT_SECURE_NO_WARNINGS #include "DxLib.h" #include <locale.h> char 文[26][255]; void 読() { int FH= FileRead_open(u8"test1.txt"); for(int i=0;i<25;i++){ FileRead_gets(文[i],250,FH) ;} FileRead_close(FH); } void 書() { FILE *fp; if( ( fp=fopen( u8"test2.txt", u8"w" ) )==NULL){return;} for(int i=0;i<25;i++){fprintf(fp, u8"%s\n", 文[i]);} fclose(fp); } int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { setlocale( LC_ALL, ".utf8" ); SetUseCharCodeFormat( DX_CHARCODEFORMAT_UTF8 ); ChangeWindowMode( TRUE ); SetGraphMode(500,500,16); if( DxLib_Init() < 0 ) return -1; int 色白 = GetColor( 255 , 255 , 255 ) ; 読(); while( ProcessMessage() == 0 ) { for(int i=0;i<25;i++){DrawFormatString( 10,25*i,色白,u8"(%s)",文[i]);} if((GetMouseInput()&MOUSE_INPUT_LEFT )!=0)break; } 書(); DxLib_End(); return 0; }
メンテ
Re: 文字コードを変換してテキストファイルのテキストを表示したい ( No.3 )
名前:itohii 日時:2020/09/24 22:40

アドバイスありがとうございます。 @のときに、追記にある「名前を付けて保存」という操作をしたうえで、 掲載してくださったプログラムを実行するということですかね? やっぱり SetUseCharCodeFormat( DX_CHARCODEFORMAT_UTF8 ); してテキストファイルも、プログラムでもUTF-8で統一した方がよろしいですね…。 ありがとうございます。いろいろ修正します。
メンテ
Re: 文字コードを変換してテキストファイルのテキストを表示したい ( No.4 )
名前:管理人 日時:2020/09/24 23:32

すみません、FileRead_gets の自動フォーマット判定や FileRead_set_format がバグっていまして、 最近修正しました こちらの暫定最新版では正常に動作すると思いますので、よろしければお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.3 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい) > FileRead_set_format()やConvertStringCharCodeFormat()あたりを使えばいいのかなと思っているのですが > 思うようにいかないです。 上記修正版でも自動フォーマット判定が100%成功するとは限りませんので、確実に処理する場合は FileRead_open の後、FileRead_set_format でフォーマットを明示的に設定してください ConvertStringCharCodeFormat は使用しなくても大丈夫です
メンテ
Re: 文字コードを変換してテキストファイルのテキストを表示したい ( No.5 )
名前:itohii 日時:2020/09/25 00:56

たろう様、管理人様 ・テキストファイルも、プログラムでもUTF-8で統一する ・FileRead_open の後、FileRead_set_format でフォーマットを明示的に設定 で、やりたいことができました。本当にありがとうございます!
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存