スポンサード リンク

T.Ishii's Software Library

HTML5 レトロ風ゲーム館

無料ブログはココログ

« もう少しかかるので | トップページ | ネガティブなコメントが付いた »

もう二日はかかるかなあ

今は、MasterReversiの次バージョンを開発中で、マルチバイト文字セットからUnicode文字セットに変更する作業は、非常に大変なので、まだ、二日程度はかかりそうだ。何故大変なのかというと、巷にある既存データの多くはUnicode文字セットにはなっていないからだ。

Unicode文字セットというのは、アルファベットの格納にも2バイトのメモリ領域が必要になる。なので、普通の米国人はUnicode文字セットなんか使わないのが普通なので、かなり前に書いた様に、Webやメールのエンコードには、普通はUTF8が使われる訳だ。

UTF8というのは、アルファベットはマルチバイト文字セットと同様に、1バイトで表現され、漢字の様なアルファベット以外の文字については、SHIFT-JISの様に、2バイト以上で表現している。

と、いう事なので、WindowsはNTの頃からUnicodeに対応しているのだが、使われているテキストファイルの多くは、Windowsが言うところのUnicode、つまりUTF16ではエンコードされていない。

このため、Unicode文字セットのWindowsアプリが外部ファイルにアクセスする場合、そのテキストは変換しなければならない訳だ。

MasterReversiの場合、外部に色々なファイルを用意しているし、ユーザーが保存する事も出来るのだが、それらに含まれるテキストは全てマルチバイト文字セットになっている。

で、現行版はマルチバイト文字セットでビルドしてあるので、整合性が採れているのだが、次バージョンはUnicode文字セットでビルドしているので、整合性が採れない訳だ。

このため、外部ファイルからの読み込みと保存時には、テキストデータは変換しなければならないのだが、元々のソースコードでは、外部データの読み込みと保存時には、その構造体データを一括して読み込んだり保存したりしていた。

何故、そうしてあったのか、というと、構造体データの要素は色々とあるので、それらを一々把握しつつ読み書きするのは面倒だったからなのだが、テキストデータの変換が必要になる、という事は、構造体に含まれるデータも、個別扱いする必要が生じる。

なので、次バージョンでは、データの読み書きルーチンは大げさな事になっているのだが、インターナショナル版を作る時には、自前データはUnicode文字セットのまま読み書きする格好に変更する筈だ。

これは何故なのか、というと、マルチバイト文字セットのデータは国ごとにアサインされている文字が異なるので、例えば、日本で保存されたデータを外国版のWindowsで読み込むと、日本語ではない外国の文字が、滅茶苦茶に、表示される格好になる。

これに対して、Unicode文字セットで保存しておけば、日本語として保存されたテキストは外国でも日本語として表示されるので、少しは望ましい訳だ。

もっとも、内部的に一回でもマルチバイト文字セットとUnicode文字セットの変換が行われると、問題が出る可能性もあるかもしれない。

このため、次バージョンでは、基本的には内部データは全てUnicode文字セットに統一し、ファイルの読み書き時に形式変換する格好にしようとしている訳なのだが、データベースデータをUnicode文字セットにすると、使用メモリ量が増える事になるので、これについては、例外的にマルチバイト文字セットのままにしておくかもしれない。

= この記事に関連する公開中ソフト =

MasterReversi

MasterReversi

(2016/05/04追記)

« もう少しかかるので | トップページ | ネガティブなコメントが付いた »

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/534482/63438914

この記事へのトラックバック一覧です: もう二日はかかるかなあ:

« もう少しかかるので | トップページ | ネガティブなコメントが付いた »

2017年12月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            

広告

プライバシーポリシー

  • 当サイトでは、第三者配信による広告(Google Adsense)サービスを利用しています。

    Google を含む第三者配信事業者は、Cookie を使用して、ユーザーのウェブサイトでの閲覧履歴に基づく広告を配信します。 Google 広告 Cookie を使用することにより、Google や Google のパートナーは当サイトや他のサイトへのアクセス情報に基づく広告をユーザーに表示できます。

    Cookieを無効にする設定およびAdsenseに関する詳細については、以下のリンクを参照下さい。

    広告 - ポリシーと規約 - Google