トップページ > 記事閲覧
Android:UTF8からSJISへの変換について
名前:和彦 日時: 2019/06/09 02:01

いつもお世話になっております。 DXライブラリ Android版の 文字コード形式を変換する関数「ConvertStringCharCodeFormat」について 質問がございます。 <前提> 当該の関数で、UTF8からSJISへの変換を検証しています。 入力する値が半角文字の場合、正常に変換出来たのですが 全角文字の場合、うまく変換できてなさそうです。 (出力した値をSJISで表示しても見えなかったり  SJISで文字が表示出来ても同じ文字が繰り返し表示されたりします) デバッガがないので出力した値どのように変化したか確認できてませんが 動作確認時、アプリケーションが複数回強制終了したので バッファオーバーフローが起こる程うまく変換できていないのかもしれません。 参考にソースコードの一部を抜粋します。 -----------------------------------------------------------------     char * SJISString; ConvertStringCharCodeFormat( DX_CHARCODEFORMAT_UTF8, "テスト", DX_CHARCODEFORMAT_SHIFTJIS, SJISString );     sprintf(p->str, "%s", SJISString);     ↓以降SJISの文字を表示するプログラムが続きます -----------------------------------------------------------------     ※文字列リテラルの前にu8を記入して検証しましたが駄目でした。 実機(ASUS Zenfone 4 MAX Android バージョン 7.1.1)で検証しました。 恐縮ではございますが、回答していただくことは可能でしょうか。 よろしくお願いいたします。
メンテ

Page: 1 |

Re: Android:UTF8からSJISへの変換について ( No.1 )
名前:BEUI 日時:2019/06/09 13:12

> (出力した値をSJISで表示しても見えなかったり > SJISで文字が表示出来ても同じ文字が繰り返し表示されたりします) これはDrawString等で表示しようとしているのでしょうか?Android版の文字描画関数(等)はUTF8文字列を 渡さないと正常に処理できません。 なおConvertStringCharCodeFormat(DX_CHARCODEFORMAT_UTF8, "テスト", DX_CHARCODEFORMAT_SHIFTJIS, SJISString); を試しましたが、正しく 131 101 131 88 131 103 0 に変換できています。(符号を除いて)Windowsと同じ。
メンテ
Re: Android:UTF8からSJISへの変換について ( No.2 )
名前:和彦(解決済み) 日時:2019/06/09 16:27

BEUI様 回答ありがとうございます、ConvertStringCharCodeFormatは正常に変換できているとのこと 承知しました。 強制終了はConvertStringCharCodeFormatに初期化していない文字列のポインタを 指定したことが原因のようでした。 当環境にて以下の通り、文字列を初期化するようソースコードを修正して再検証することで ConvertStringCharCodeFormatが正常に動作したことを確認しております。   変更前) char * SJISString;   変更後) char SJISString[256] = ""; 「Androidアプリ開発の基礎的な情報や注意点など 」に記載の 「4.Androidアプリではグローバル変数が 0 で初期化されることを前提としてはいけないこと」 の通り、今後は変数が初期化されているか確認して検証したいと思います。 対応ありがとうございました、本件はクローズでお願いいたします。
メンテ
Re: Android:UTF8からSJISへの変換について ( No.3 )
名前:管理人(解決) 日時:2019/06/10 01:10

char SJISString[256] = ""; とされた場合は SJIS の全角文字 127文字分以上の長さの文字列を代入するとメモリの 不正なアクセスとなってしまいますのでご注意ください m(_ _)m ( 配列の要素数 512 で 255文字、1024 で 511文字です )
メンテ
Re: Android:UTF8からSJISへの変換について ( No.4 )
名前:和彦(解決済み) 日時:2019/06/13 01:29

管理人様 ご指摘ありがとうございます。 127文字分以上の長さの文字列を代入しないよう気をつけます。
メンテ

Page: 1 |

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

   クッキー保存