[ 検索ページ |
一覧表示 |
ツリー表示 |
MLトップ |
トップページ ]
[comu-ml 0090] Windows Vista の JIS2004対応について
- From: Kentaro Ohkouchi (Loop AZ) <ohkouchi@loop-az.jp>
- Date: Sat, 12 May 2007 07:36:04 +0900 (JST)
大河内です.
Windows Vista で, 日本語の文字集合に, JIS X 0213:2004(JIS2004) が採用
されたことはご存知のことかと思われます.
このため, 扱える漢字が増えたり, 字体が変化したりして, さまざまな影響が
考えられます.
EC-CUBE の場合, どのような影響が考えられるでしょうか.
本業の方(Java)で, Windows Vista での影響調査をする機会があり, いろいろ
調べましたので, ちょっとまとめてみます.
■ 文字集合と文字エンコーディングについて
文字のまとまりを規格化できるよう, 各文字に対して一連のコード(文字コー
ド)を割り当てたものを「文字集合(文字セット)」と言います. これには,
Unicode や, JISX 0213:2004 があたります.
この文字集合をコンピュータで扱えるよう, 文字コードをバイトコードへ変換
する仕組み(文字符号化方式)を文字エンコーディングと言います.
これには, Shift_JIS や, EUC-JP, UTF-8, UTF-16 などがあります.
以下は, Unicode で規定されている文字エンコーディングの抜粋
* UTF-8 - 8bit 単位の可変長コードにエンコードする方式
* 1バイト - すべての ASCII
* 2バイト - JIS X 0208の非漢字の一部
* 3バイト - Windows-31J の拡張文字エリア全て, 第3・4水準漢字の一部
* 4バイト - JIS X 0213:2004 の第3・4水準漢字の一部, UnicodeのBMP
面以外すべて
* UTF-16 - Windows XP, Vista の内部エンコーディング. Vista では, JIS X
0213:2004 の文字集合が採用された. 16bit 単位の可変長. BMP面
とは, 16bit のみで表現される範囲のことを言い, 16bit + 16bit で
表現される範囲を「サロゲート領域」と言う
一方, JIS X 0213:2004 では, 文字エンコーディングとして,
ISO-2202-JP-2004, EUC-JP-2004, Shift_JIS-2004 などがあるが, IANA に登
録されていないため, あくまでも参考となっています.
■ Windows Vista での問題
使用する文字セットに, JIS X 0213:2004 を採用したため, UTF-16 でエンコー
ディングされる場合, BMP面以外の文字(16bit + 16bit で表現される文字)ま
でサポートされることとなりました.
このため, UTF-8 でエンコーディングされる場合は, 1文字が4バイトで表現さ
れる文字も含まれます.
* BMP(Basic Multilingual Plane)面とは, UTF-16 にて, 16bit のみで表現
できる領域の文字のことを言い, 16bit + 16bit で表現する文字の範囲を
「サロゲートペア(サロゲート領域)」と言います.
■ PHPでの扱い
http://jp.php.net/mbstring を見るかぎりは, mbstring 関数を使用すること
で, サロゲート領域の文字が入力されても, うまく対応できそうです.
文字エンコーディングは, UTF-8 が無難でしょう.
■ MySQL での問題
http://www.mysql.gr.jp/mysqlml/mysql/msg/13823
これを見ると, DBエンコーディングに UTF-8 を使用した場合でも, 扱えるの
は, 1文字3バイトまでの範囲に限られるようです...
■ PostgreSQL での扱い
8.1.7以降、8.2.2以降であれば, UTF-8 で問題なく扱える.
それ以前のバージョンは, 1文字4バイトで表現される文字を使用した場合に問
題がでる可能性あり.
http://mlog.euqset.org/archives/pgsql-jp.ml.postgresql.jp/38404.html
ちなみに, Oracle は 10.1.0以降で対応とのことです.
■(参考:オフトピ) Java での問題
char が 16bit であるため, 16bit + 16bit のサロゲート領域が正常に扱えな
い.
具体的には, String#length() や, String#substring() が正常に動作しない.
プロパティファイルなど, \uXXXX で表わすものは 16bit なので, サロゲート
領域の文字は使えない. プロパティファイルを XML で書けば, 任意のエンコー
ディングを使用できるので, サロゲート領域の文字も使用可能
■ EC-CUBE への影響
デフォルトエンコーディングである, EUC-JP の場合, JIS X 0208, JIS補助漢
字(JIS X 0212) を越える範囲の文字が入力された場合, 文字化けしてしまう
可能性がある.
mbstring.http_output が EUC-JP でも, mbstring.internal_encoding を
UTF-8, mbstring.http_input = auto にしておけば,
mbstring.substitute_character = none とすることにより, カットされるは
ず(未検証)
エンコーディングを UTF-8 にしても, DB に MySQL を使用した場合は苦しい
ですね...
1文字4バイトで表現される文字が入力された場合はアウトみたいです.
このことを考えると,
mbstring.internal_encoding = UTF-8
mbstring.http_input = auto
mbstring.http_output = EUC-JP
mbstring.encoding_transation = On
mbstring.substitute_character = none
としておくのが無難そうです.
DBエンコーディングの種類により, DBへ渡す際にコード変換が必要な場合もあ
り.
PostgreSQL の場合は, UTF-8 を使用することで大きな問題はなさそうです.
8.1.7以降、8.2.2以降なら安心ですね.
■ さらに...
http://itpro.nikkeibp.co.jp/99/vista/index.html
これを見ると, Vista で入力できても, XP 以前では対応していない文字が183
字あり, この中には人名漢字も含まれます.
仮にWebアプリケーション側が Vista にフル対応したとしても, XP では表示
できないというトラブルも発生します.
XP に JIS2004対応フォントをインストールしたりすることで回避できますが,
対応をクライアント側に任せるのもどうかと...
いちばん良いのは, Vista で問題の文字を入力した場合に警告を出すことでしょ
うかねえ...
# このあたりの問題, EBiS さんはどう対応されているのでしょう?
----------------------------------------------
大河内健太郎(Kentaro Ohkouchi)
E-mail: ohkouchi@loop-az.jp
有限会社Loop AZ
http://www.loop-az.co.jp/
常駐先: 株式会社 SRA
E-mail: z-ohkouc@sra.co.jp
----------------------------------------------
[ 検索ページ |
一覧表示 |
ツリー表示 |
MLトップ |
トップページ ]