|
Packit Service |
df60bb |
gd ライブラリで日本語文字列を使う上での注意事項
|
|
Packit Service |
df60bb |
|
|
Packit Service |
df60bb |
山賀正人 (ma@yama-ga.com)
|
|
Packit Service |
df60bb |
|
|
Packit Service |
df60bb |
|
|
Packit Service |
df60bb |
gd-1.7.0 からはそのままで gdImageStringTTF() に対して
|
|
Packit Service |
df60bb |
SJIS encoding のフォントが使用できます。
|
|
Packit Service |
df60bb |
|
|
Packit Service |
df60bb |
※ Unicode encoding のフォントに対しては日本語文字列を UTF-8 で
|
|
Packit Service |
df60bb |
指定すれば日本語が表示できます。
|
|
Packit Service |
df60bb |
|
|
Packit Service |
df60bb |
つまり gdImageStringTTF() で SJIS encoding のフォントを指定すると
|
|
Packit Service |
df60bb |
文字列は無条件に日本語であると解釈され、漢字コード (EUC, SJIS, 7bit JIS)
|
|
Packit Service |
df60bb |
が自動判別されて適切に処理されます。
|
|
Packit Service |
df60bb |
|
|
Packit Service |
df60bb |
更に UNICODE encoding のフォントに対しても JIS 系の日本語 (EUC, SJIS, 7bit JIS)
|
|
Packit Service |
df60bb |
を使用する場合は、コンパイル時に -DJISX0208 を付けてコンパイルしてください。
|
|
Packit Service |
df60bb |
こうすると gdImageStringTTF() で指定された文字列に ASCII 以外の文字があると
|
|
Packit Service |
df60bb |
無条件に日本語文字列であると解釈され、漢字コードを自動判別後に
|
|
Packit Service |
df60bb |
適切に処理されます。
|
|
Packit Service |
df60bb |
|
|
Packit Service |
df60bb |
ただしこの場合は UTF-8 の日本語文字列を扱えなくなりますので、
|
|
Packit Service |
df60bb |
ご利用の環境等に応じて -DJISX0208 を付けるか否かを決めてください。
|
|
Packit Service |
df60bb |
|
|
Packit Service |
df60bb |
漢字コードの変換に OS 付属の iconv() を使う場合は
|
|
Packit Service |
df60bb |
CFLAGS に -DHAVE_ICONV を付けてコンパイルしてください。
|
|
Packit Service |
df60bb |
この場合に -DHAVE_STDARG_H と -DHAVE_ERRNO_H も付けておくと
|
|
Packit Service |
df60bb |
漢字コード変換の際にエラーが発生した場合に適切なメッセージを
|
|
Packit Service |
df60bb |
表示するようになります。
|
|
Packit Service |
df60bb |
|
|
Packit Service |
df60bb |
|
|
Packit Service |
df60bb |
☆ EUC か SJIS か判別できなかった場合の漢字コードの判別方法
|
|
Packit Service |
df60bb |
|
|
Packit Service |
df60bb |
(1) 環境変数 LC_ALL, LC_CTYPE, LANG をこの順番でチェックする
|
|
Packit Service |
df60bb |
(2) 環境変数からも判別できなかった場合は UNIX ならば EUC、
|
|
Packit Service |
df60bb |
Win32 ならば SJIS と見なす
|
|
Packit Service |
df60bb |
|
|
Packit Service |
df60bb |
コンパイル時に -DSJISPRE を付けてコンパイルすれば、UNIX であっても
|
|
Packit Service |
df60bb |
SJIS を優先するようになります。
|