トップページ > 記事閲覧
windows版を基本に、androidにも移植しやすい環境について
名前:たろう 日時: 2020/08/19 13:04

海外版にするためvisual studioの「文字セット」の項目を「マルチ バイト文字セットを使用する」に変更し 例えば以下のような形で変数を用意して今まで使っていたのですが TCHAR path1[PATH_LENGTH]; _stprintf(path1,_T("sys/%02d.txt"),1); int FH= FileRead_open(path1); android対応のため、以下を参考にutf-8に変更しようと色々やっているのですが ttps://dxlib.xsrv.jp/lecture/Android/Android_CharCode.html#R5 ↑のやり方では char path1[PATH_LENGTH]; sprintf(path1,u8"sys/%02d.txt",1); int FH= FileRead_open(path1); のようになると思うのですが、utf-8もユニコードなので、なんでcharなのか分からず (※上記ページに記載がなくcharのままと仮定して試したら一見上手くいっただけで、実際よくわかりませんm(__)m) ttps://dxlib.xsrv.jp/cgi/patiobbs/patio.cgi?mode=view&no=5000 ↑のようにvisual studioの「文字セット」の項目を「マルチ バイト文字セットを使用する」にするともありますし ですがその場合例えばFileRead_open()に渡すのはWCHARになるので問題があります。 windows版を基本に、海外版にも対応可能な、かつandroidにも移植しやすくと考えたとき この辺りはどういう方法を取るのがベストなのでしょうか? 基本的な知識が足りずすみません、教えていただけると助かります 宜しくお願いいたしますm(__)m
メンテ

Page: 1 |

Re: windows版を基本に、androidにも移植しやすい環境について ( No.1 )
名前:管理人 日時:2020/08/20 00:09

> ↑のやり方では > char path1[PATH_LENGTH]; sprintf(path1,u8"sys/%02d.txt",1); int FH= FileRead_open(path1); > のようになると思うのですが、utf-8もユニコードなので、なんでcharなのか分からず ユニコード = wchar_t というわけではないからです ユニコードにも色々ありまして、wchar_t のユニコードは utf-16le、utf-16be、 utf-32le、utf-32be のどれかで、処理系によって異なります ( Windowsでは utf-16le で、Android では utf-32le です ) なので、utf-16le を使用する場合は「文字セット」の項目を「Unicode 文字セットを使用する」に 設定して、それ以外を使用する場合は「マルチ バイト文字セットを使用する」を設定します utf-8 は utf-16le ではないので、「マルチ バイト文字セットを使用する」を設定するわけです > ↑のようにvisual studioの「文字セット」の項目を「マルチ バイト文字セットを使用する」にするともありますし > ですがその場合例えばFileRead_open()に渡すのはWCHARになるので問題があります。 いえ、「マルチ バイト文字セットを使用する」の設定の場合は FileRead_open に渡すのは char です > windows版を基本に、海外版にも対応可能な、かつandroidにも移植しやすくと考えたとき > この辺りはどういう方法を取るのがベストなのでしょうか? 現在でしたら utf-8 を使用するのが良いかと思います ただ、utf-8 を使用する場合は https://dxlib.xsrv.jp/lecture/Android/Android_CharCode.html#R5 の説明の通り、WinMain の冒頭で SetUseCharCodeFormat( DX_CHARCODEFORMAT_UTF8 ); を 実行する必要がありますので注意してください m(_ _)m あと、sprintf や fopen など標準関数を使用する場合は、#include <locale.h> を 追加の上で、やはり WinMain の冒頭で setlocale( LC_ALL, ".utf8" ); を実行する 必要があります( sprintf や fopen などの標準関数に渡す文字列が utf-8 である、 ということを設定しないとデフォルトのシフトJISの文字列として扱われてしまうため )
メンテ
Re: windows版を基本に、androidにも移植しやすい環境について ( No.2 )
名前:たろう 日時:2020/08/20 00:52

いつもありがとうございます。 すみません、「FileRead_open()に渡すのはWCHARになる」の件は 頭の中でマルチバイトとユニコードが途中で逆になり変な事を書いていました。 念のため確認させていただきたいのですが、では上であげた例の記述としては char path1[PATH_LENGTH]; sprintf(path1,u8"sys/%02d.txt",1); int FH= FileRead_open(path1); が正解で、かつ、DxLib_Init の前に、SetUseCharCodeFormat( DX_CHARCODEFORMAT_UTF8 ) そして、#include <locale.h>追加の上でWinMain の冒頭 setlocale( LC_ALL, ".utf8" ); であっていますでしょうか? その他に何か注意点がございましたら調べますので、ヒントなど教えていただけると助かります。 知識が足りずすみません、よろしくお願いいたします<(_ _)>
メンテ
Re: windows版を基本に、androidにも移植しやすい環境について ( No.3 )
名前:管理人 日時:2020/08/20 01:10

> 念のため確認させていただきたいのですが、では上であげた例の記述としては > char path1[PATH_LENGTH]; sprintf(path1,u8"sys/%02d.txt",1); int FH= FileRead_open(path1); > が正解で、かつ、DxLib_Init の前に、SetUseCharCodeFormat( DX_CHARCODEFORMAT_UTF8 ) > そして、#include <locale.h>追加の上でWinMain の冒頭 setlocale( LC_ALL, ".utf8" ); > であっていますでしょうか? はい、あっています 因みに SetUseCharCodeFormat( DX_CHARCODEFORMAT_UTF8 ) も setlocale( LC_ALL, ".utf8" ); と 同様に WinMain の冒頭で実行した方がより良いです ( setlocale と SetUseCharCodeFormat はどちらが先でも問題ありません ) > その他に何か注意点がございましたら調べますので、ヒントなど教えていただけると助かります。 SetUseCharCodeFormat( DX_CHARCODEFORMAT_UTF8 ); と setlocale( LC_ALL, ".utf8" ); を 実行しても Win32 API に渡すべき文字列はシフトJISのままですので、 fopen の代わりに Win32 API である CreateFile など文字列を引数に渡す API を呼ぶ際は 注意してください( A〜Z 0〜9 などのアルファベットと数字と .,+-*/=~|[]!"#$%&'()_ などの 基本的な半角文字でしたら シフトJIS と utf-8 は共通なので、文字列を渡す Win32 API を 呼ぶ際は基本的に全角文字を使わないようにすると良いです( 因みに半角カタカナはNGです ) )
メンテ
Re: windows版を基本に、androidにも移植しやすい環境について ( No.4 )
名前:たろう(解決) 日時:2020/08/20 01:35

いつもありがとうございます。 冒頭に実行の件、Win32 API関連の件など 情報をありがとうございます。 参考にさせていただきます 夜遅くにお手数をおかけいたしました ありがとうございましたm(__)m
メンテ
Re: windows版を基本に、androidにも移植しやすい環境について ( No.5 )
名前:たろう 日時:2020/09/01 23:50

たびたびすみません、解決済みにしたスレッドですが、 関連なのでここに引き続き質問させてくださいm(__)m ttps://dxlib.xsrv.jp/lecture/Android/Android_CharCode.html#R5 ↑のページには 「txtファイルなど外部のファイルからゲーム中に表示する文章データを読み込む場合は、それらの   txtファイルを作成した際に文字コードを『UTF-8』に変更する必要があります。」 とあるのですが、ANSIを選んで保存したテキストファイルでも、文字化けなく使えるようです 色々な文字を試しましたが、文字化けしませんでした。 これはつまり、SetUseCharCodeFormat( DX_CHARCODEFORMAT_UTF8 );を使うことで、 たとえANSIで保存したファイルであってもFileRead_getsなどDXライブラリの関数で読み込めば 自動でutf-8に変換されているという事でしょうか? そうであれば他の形式のUnicodeで保存したテキストファイルなども変換されるのでしょうか? お忙しい所すみません、よろしくお願いいたします
メンテ
Re: windows版を基本に、androidにも移植しやすい環境について ( No.6 )
名前:管理人 日時:2020/09/02 00:44

> これはつまり、SetUseCharCodeFormat( DX_CHARCODEFORMAT_UTF8 );を使うことで、 > たとえANSIで保存したファイルであってもFileRead_getsなどDXライブラリの関数で読み込めば > 自動でutf-8に変換されているという事でしょうか? はい、その通りです 最近 txtファイルの文字コード形式を自動で検出する機能を追加したので、 ある程度はシフトJISなのか、UTF-8なのかを自動で判別するようになっています ただ、Bom付きのUTF-8のtxtファイルであれば自動判別処理が確実に UTF-8 であると判断できるので、 txtファイルは Bom付きのUTF-8 をお勧めします m(_ _)m
メンテ
Re: windows版を基本に、androidにも移植しやすい環境について ( No.7 )
名前:たろう(解決) 日時:2020/09/02 09:40

ファイルのプロパティからパスをコピペしてutf-8のテキストに保存→それを読みこんで使う という様な事をしているのですが、パスのコピー時にうっかりはみ出して選択コピーすると utf-8では表示されない謎の文字が文頭に付け加わって、パスが通らない事があったりします。 それがANSIだと文頭に「?」が表示されて判別できるので 判定精度の問題はあっても、自動で変換されるのはすごく助かります。 ありがとうございましたm(__)m
メンテ

Page: 1 |

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

   クッキー保存