スポンサード リンク

T.Ishii's Software Library

HTML5 レトロ風ゲーム館

無料ブログはココログ

« 非常識な常識 | トップページ | ポップアップメニューとか »

文字列で少し苦労する

今は、macOS用ネイティブ版AGMPlayerの開発フェーズで、進捗状況としては、あまり芳しくは無いものの、毎日、少しずつは進展している。macOS用の現行版はJava版なので、文字列の扱いは容易だったのだが、ネイティブ版だと少し苦労する。

Windowsでは、メモ帳なんかで日本語を入力すると、Shift-JIS形式の文字コードにエンコードされて保存されるのが普通かもしれない。

で、macOSでも、OS X よりも前の時代には、長らく、日本語の文字コードとしては、Windows環境とほぼ同等のShift-JISが使われていた筈だ。

しかし、OS X以降では、macOSもUNIX系OSになった訳なので、最近では、文字コードとしては、UTF8が使われる事が増えていて、標準添付の「テキストエディット」でも、「標準テキスト」のデフォルト保存形式としては、「Unicode (UTF-8)」が選択されている。

と、言う事で、見かけ上は、日本語文字列については、Windowsでは、未だにShift-JISが使われ、macOSでは、UTF-8が使われる様になっている、みたいに見えるかもしれないのだが、実際には、Windowsの内部文字コードはUTF16になっている。

そして、Javaについても、内部文字コードはUTF16なので、日本語文字列の扱いについては、Java版を開発するにあたっては、Windows版との親和性は比較的高かったのだが、macOSでは、内部的な文字コードにもUTF-8が使われているので、少し面倒な作業も必要になる。

もっとも、UTF8とUTF16を比較した場合、単純な作業しかしない場合には、文字列がUTF8で表現されていた方が、普通のC言語関数が利用できるので便利だ。

なので、問題になるのは、少し複雑な処理を行う場合に限られるのだが、例えば、文字列が長すぎるので、途中で切って、最後に「...」みたいな続き文字を入れる格好に変更しようとすると、C言語関数を普通に使うだけでは問題が出てくる。

何故なら、UTF8では、普通の日本語は1文字あたり3バイトで表現されるのだが、C言語のstrlen関数なんかでは、そんな事はお構いなしなので、日本語の1文字だけが入力されているテキストの文字列をstrlenでカウントすると、3、という結果が出力される訳だ。

なので、本当の文字数を知りたい場合だとか、文字列の一部を切り出したい場合には、結局のところ、C言語の標準関数は利用できないので、別関数を使用する必要がある訳だ。

そして、Java環境では、そういった文字列操作用の関数は標準で色々と用意されているので、それらを使えば良い訳なのだが、macOS環境だと、そういう関数は用意されていない様な気もするし、用意されていたとしても、後々、Ubuntuに移植する事を鑑みれば、そういった汎用性がないライブラリ関数は使えない訳だ。

と、言う事なので、現状、少し複雑な文字列処理を行う場合には、自前のライブラリに必要な関数を作成して追加する必要も生じているので、ちょっと厄介な訳だ。

ちなみに、UTF8では、1文字が1〜6バイトで表現されるのだが、日本語は大体3バイトで表現される。

なので、実は、日本語主体のテキストでは、基本的には、全文字が2バイトで表現されているUTF16よりもスペース効率は悪い、という事になる。

更に言えば、Shift-JISというのは、普通のアルファベットなら、1バイトで表現されるので、英語まじりの文章なら、UTF16よりも、スペース効率が良い、という事になる。

もっと言うなら、未だにメールで使われるJISコードだと、Shift-JISと似た様な文字表現が可能である上に、各バイトは8ビットではなく、7ビットで表現されるので、よりスペース効率は良い、という事になる。

と、言う事で、日本語を含む文字コードとしては、実際の所、古いものほど、スペース効率が良く、新しくなるにつれて、スペース効率は悪くされてきている。

その理由は、グローバル化にある筈で、多分、そのお陰で、アラビア語を常用語としている人たちが使っているソフトでも、普通に日本語が表示される様になった筈だ。

もっとも、作者的には、アラビア語が表示されても、全く意味不明なので、そういう人たちが日本語が正しく表示されているのを見れても、意味があるのかどうかは微妙かもしれない。

« 非常識な常識 | トップページ | ポップアップメニューとか »

トラックバック

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

この記事へのトラックバック一覧です: 文字列で少し苦労する:

« 非常識な常識 | トップページ | ポップアップメニューとか »

2017年11月
      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    

広告

プライバシーポリシー

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

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

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

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