[pgsql-jp: 30776] Re: 漢字3 とは

MORIYAMA Masayuki msyk @ mtg.biglobe.ne.jp
2003年 8月 13日 (水) 19:35:06 JST


森山です。

At Wed, 13 Aug 2003 12:34:21 +0900,
Yumiko Ono さん:
> (1)PostgreSQL(EUC_JPで設定)や、
> (2)PostgreSQL ODBC Driver 07.01.0006 日本語版
> は、これらの文字に対応しているのか?
> というのが知りたかったのです。

http://www.interwiz.koganei.tokyo.jp/software/PsqlODBC/

を見ると、PostgreSQL ODBC Driver 07.01.0006 日本語版 は、「漢字
コード変換仕様はOSF/JVC推奨の仕様に準拠」とありますから、これが
本当であれば、EUC_JP で、IBM拡張文字に対応しているハズです。
(実際に確認したわけではないので断定は避けます。)

  日本語 EUC とシフト JIS との間のコード変換規則 
  http://www.opengroup.or.jp/jvc/cde/sjis-euc.html

  Unicodeとユーザ定義文字・ベンダ定義文字に関する問題点と解決策
  http://www.opengroup.or.jp/jvc/cde/ucs-conv.html

# ちなみに、Widnows 用ブラウザの EUC-JP は、上記ページで説明され
# ている eucJP-open(eucJP-ms) とは別物で互換性はないので注意が必
# 要です。

> いわゆる漢字3の文字についての現象は以下です。
> ・PHPから入力 → PHPで表示:問題なし
> ・PHPから入力 → psqlで表示:問題なし

psql で表示とありますが、文字コードは何で表示しましたか?
EUC の場合、端末が PostgreSQL の EUC_JP (eucJP-open) に対応してお
らず、正しく表示できない可能性が大です。

ちなみに、TeraTerm の EUC では eucJP-open の 13区(NEC特殊文字) 
以外の機種依存文字を正しく表示できません。TeraTerm の EUC で IBM
拡張文字 (NEC選定IBM拡張文字) が正しく表示できてしまっている場合
は、PostgreSQL の変換で期待する変換が行われず、他のソフトで 
PostgreSQL に UTF-8 や SJIS でアクセスして表示させると文字化けし
ます。

> ・PHPから入力 → (2)経由でACCESS で表示:文字化け、もしくは「・」
> ・ACCESSから入力 → PHPで表示:文字化け(他のコードに変換されている)
> ・ACCESSから入力 → psqlで表示:文字化け(他のコードに変換されている)
> ・ACCESSから入力 → ACCESSで表示:問題なし

PHP では、eucJP-win や Windows-31J (SJIS-win) を使うようにしない
と、PostgreSQL の文字コード(エンコード)変換との齟齬を生じてしま
います。

PHP + PostgreSQL という組み合わせで、機種依存文字も扱う場合は 
PHP は、次のような設定にする必要があると思われます。

  PHP 内部処理コード(スクリプトのコード) を eucJP-win
  PHP の表示コードを Windows-31J (← eucJP-win は NG)

  php.ini の [mbstring] 設定例 (以前、テストした時の設定)

  [mbstring]
  default_charset               = Shift_JIS
  output_buffering              = On
  output_handler                = mb_output_handler
  mbstring.language             = Japanese
  mbstring.internal_encoding    = eucJP-win
  mbstring.http_output          = Windows-31J
  mbstring.http_input           = ASCII,JIS,Windows-31J,UTF-8,EUC-JP
  mbstring.detect_order         = ASCII,JIS,Windows-31J,UTF-8,EUC-JP
  mbstring.substitute_character = none
  
  ※Windows-31J とは、Windows のシフトJIS の事で、いわゆる機種依
    存文字を含んだものを言います。

‖ 森山 将之 (MORIYAMA, Masayuki) 
‖ E-Mail: msyk @ mtg.biglobe.ne.jp 




pgsql-jp メーリングリストの案内