前へ  次へ

ティアのたわごと4☆其の409


日本語とあたし

皆さんごきげんようw

最近格闘している言語は中国語です。

べつに、勉強している訳ではありませんが、仕事で必要なんです・・・プログラムで・・・・・

 

さてさて、今回はちょっとWindowsなお話

良く日本語Windowsとか英語windowsとか・・・・挙げていけばいろいろなウインドウズがあるのですが

これら、実はそれぞれの言語で実行されている訳ではありません。

意味が分からないって?

 

えっと〜、日本語だと漢字がある訳ですが、同じような字を使っていてる中国語も有れば

読み方も分からないアラビア語(しかも右から左に書くんです)とか色々あります。

似たような字はともかく、全く違う言葉をwindowsはどうやって表示しているのでしょうか?

 

もちろん日本語版windowsで日本語が表示できるのは当然として・・・インターネットエクスプローラーとかで他国サイトに行くと「フォントのインストール」とかを行うだけでその国の言葉が表示されて、ちゃんとHPが見られるようになります。

 

じゃぁそのフォントが有れば何でも出来るかというと、そうでもありません。

 

HPのソース表示ってのを行えば分かりますが、特に標準のメモ帳のままだと、中国語のサイトを表示しているのにもかかわらず、カタカナや全然違う漢字が表示されたりします。

これは、当然、メモ帳が中国語のフォントに対応していないことが原因なんですが、インターネットエクスプローラーはどうやって中国語を表示しているのでしょうか?

そこを表示するときだけ中国語のフォントにして〜ってこともありますが、問題なのはそこに英語も混じること(笑

HPを表示するHTMLってのは英語です。実は、中国語と英語が混じっているんですね〜

それは、日本語のでも同じですが・・

これのことを、マルチバイト文字列といって、

サイズが不揃いの文字の集まりだと言うことです。

英語の部分はともかく、それ以外の部分は日本語、中国語、韓国語などそれぞれの国により違う形式なので

フォントだけで処理した場合、中国語と日本語が混在したウィンドウなどは表示できるはずがなかった訳です。

IEでそんなHPが有った場合表示できないのは事実ですが、それとはまた別件ですw

一番の問題点は各国の言語がそれぞれで一意な番号で、文字が表示されているのが原因で

たとえば 水 は9085(SJIS)とかって番号が振られていますが 中国語(GB2312)では 立心偏に戒って字です。

 

そこで、登場するのがUniCodeって呼ばれるものです。

これは、各国の言葉どれを持ってきても、同じ数字が付かないようになっています。

これを使うことで、安易にいろんな国の言語がいっぺんに表示できるようになる訳です。

これのことを、ワイド文字列っていうらしいです。

まぁちょっと大きいんです。

これは、英語を持ってきても以前のような「半角」ではなく2バイトの文字なんですね〜

さてさて、windowsプログラミングにおいて

各国の言語を表示したりなんだりするためには、このunicodeが必須です。

 

実は、windows事態は内部はunicodeで動いているらしいですが、標準で出力するのが自国のマルチバイト文字(自動変換されます)ってだけなんですよね

プログラムを作るときにコンパイルオプションで unicodeかマルチバイト文字かを選択するんです。

 

微妙な誤差が出るのが

lstrlenとかの 文字数などをカウントする機能

もちろんWM_GETTEXTLENGTHなど全てに影響が出ます。

 

普通にSendMessageとか使うと思うのですが、これ、上記コンパイルオプションにより

SendMessageAとSendMessageWへ自動変換されます。
(それぞれを意図的に指定することも可能ですよ)

Aがマルチバイト文字列(日本ならSJIS)
Wがワイド文字列(UNICODE)

そうそう、unicodeで様々な言語を作成してレジストリに文字列として保存するとおもしろいですよ

おそらく、レジストリエディッタは標準アプリとして唯一各国語を同じページに表示できます。

その国のフォントがいることには変わりないですが、内部処理が全部UNICODEで行われているからこのようなことが出来るのでしょうねw

 

っていうかですね、

ダイアログボックスとかどれにしても、表示に使用するフォントを変更したくらいではその国の言葉は表示できません。

上記自動変換により、表示直前?などにマルチバイト文字との変換比較などが入り

日本語にない文字は「?」に変換されてしまいます。

これは、コンパイルオプションでマルチバイト文字をしているなどで

DialogBoxAを利用してウィンドウが作成されたときに起き

DialogBoxWを利用して作成するとUnicodeモードなのでフォントさえちゃんと指定していれば、

問題なく表示できます。

 

そうそう、先週はこれにはまっていたのよね〜

 

☆ティア☆
2004/5/17


前へ  次へ

Go TAWAGOTO Menu たわごと☆のメニューに戻る時はここを押してね☆

Go HomePage ホームページに戻る時はここを押してね☆