HTTPサーバーとWeb開発

98. 国際言語の入出力をサポートするには (1)

グローバリズムが急速に広がりつつあるのは周知の事実である。
国内の生産工場は海外に移転され、海外拠点とデータや情報交換にWeb化は欠かすことはできない。
はじめは日本語や英語でよかったものの、やはり現地語でのわかりやすいインターフェースの
構築が必要となってくる。
適用業務は Web化は導入過程を終えて次の国際言語化の過程へと進んできているのである。

ここでは国際言語化の具体的な手法を紹介していこう。

■ System i への2次言語の導入

必ずしも必須ではないがIBM System i の2次言語として外国語は導入しておいたほうがよいだろう。
外国語が導入されていなくても CCSID がきちんと設定されていれば外国語のデータ・ベースを
扱うことはできるが表示してもそれが正しい文字であるかどうかを判定することができない。
正しく表示させるために2次言語の導入が必要となる。
2次言語は今では無料である。

■ CCSID (言語識別コード)を理解する

CCSID (言語識別コード)とはご存知のように各国の言語の識別コードであり
日本では 5026, 5035 や 1399 を始めとして数多くの CCSID がある。
対象となる外国語の CCSID を把握しておく必要がある。

代表的な
CCSID
CCSID
日本(JPN) 5026 290, 300, 301, 897, 930, 932, 942, 1027, 1041, 4396,
5026, 5035, 57345
米国(ENU) 37 37
中国簡体字(CHS) 935 836, 837, 903, 928, 935, 936, 946, 1042, 1115, 1380, 1381
中国繁体字(CHT) 937 835, 904, 927, 937, 938, 948, 950, 1043, 1114
韓国(KOR) 833 833, 834, 891, 926, 933, 934, 944, 949, 951, 1040, 1088
タイ(THA) 838 838
ドイツ(DEU) 1011 273

中国簡体字とは中華人民共和国の本土で使用されている、あの簡略化された漢字である。
中国繁体字とは香港、台湾、マレーシアで使用されている、日本の漢字に近い表記の漢字である。

CCSID=1399 はユニコードではない。ユニコード(Unicode)は漢字をすべての国で
重複を無くすためにひとつまの漢字を3バイトで表している。
これに対してCCSID=1399 は、EBCDIC であるので漢字はあくまでも2バイト表記である。
1399 がUnicode であることは断じてない。

■ HTML は Unicode (UTF-8)で作成する

外国語をサポートするためには HTMLインターフェースは Unicode で作成することが
今後の主流になることは間違いない、というか既になっている。
Unicode とは世界規約で取り決められたコード体系であり、世界中の文字コードを
重複することなく表現することができる文字コード体系のことである。
Unicode には UTF-8 と UTF-16 の2種類がある。
IBM では ILE-RPG で UTF-16 をサポートしているが、残念ながら圧倒的に普及しているのは
UTF-8 のほうである。
UTF-8 、UTF-16 はともに漢字は3バイトでひとつの漢字を表現するようになっているが
半角文字の表現は UTF-8 では 1バイト、UTF-16 では2バイトである。
UTF-16 では全体が冗長になってしまうが UTF-8 であればコンパクトであり
半角のコードも ASCII に一致しているのでわかりやすく使いやすい。
このため Microsoft もサンプル・ソースは15年以上前から UTF-8 で配布されている。
HTML 上では UTF-8 は charset=utf-8 のようにして記述する。

[例]
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
[HTMLのCCSID]

コード CCSID
UTF-8 1208
UTF-16 1200
Shift_JIS 943

CHGHTTPA コマンドで日本語環境を示すCCSID として 819 を指定するようガイドされて
きたかも知れないが、Shift_JIS の正確な CCSID は 819 ではなく 943 である。

■ ブラウザの一次言語を設定する

ブラウザには一次言語の設定があり、[ツール] - [インターネット・オプション] で
言語」のボタンを押すと次のように複数の言語を指定することができる。

何のためにこの言語の設定があるのだろうか ? HTML には

<meta http-equiv="Content-Language" content="ja">

のように Content-Language を使って国を表記することができる。また、

<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">

として Shift_JIS を示しておいてもブラウザは Shift_JIS のエンコードは
行なうものの表示は一次言語を優先して翻訳表示するのである。
このため charset=Shift_JIS であっても一次言語が中国語として設定されていれば
日本語の漢字は文字化けとなる。
ただし HTML を Unicode で記述していればブラウザの設定にかかわらず
つねに正しい表示が行なわれるのである。
これが国際言語化において Unicode が必要となる理由である。
ブラウザは charset や Content-Language を正しく判断はしてくれないのだ。
もちろんこれは HTTP/1.1 の仕様にブラウザが正しく準拠していないことに
因るものである。
HTTP/1.1 に正しく準拠していれば、このような問題は起こらない。
MS-IE も Ver9 まで上げるのであれば基本的な表示の問題を解決すべきであったろう。