[pgsql-jp: 35194] Re: IBM拡張文字の扱いについて

MORIYAMA Masayuki msyk @ mtg.biglobe.ne.jp
2005年 4月 7日 (木) 13:05:16 JST


森山です。

まず、日本語EUC で機種依存文字を扱う場合、文字コードが 2 種類あるので
ご注意ください。

Window での EUC-JP は、コードページ 51932 (CP51932) と呼ばれるもの。
PostgreSQL などの機種依存文字対応 EUC-JP は TOG/JVC の eucJP-open と呼
ばれるものを採用しているのもが多いようです。

HTML の文字コードを EUC-JP としている場合は、上記の 2 つの違いにより、
IBM拡張文字を正しく扱うことは無理ですので諦めてください。

確認はしていませんが、PHP と PostgreSQL の設定は次のようにする事で、機
種依存文字を正しく扱うことができるのではないかと思われます。

PHP ⇔ PostgreSQL で IBM拡張文字を正しく取り扱うための設定

  PHPのHTML入出力文字コード SJIS-win
  PHPの内部文字コード       eucJP-win
  DBの文字コード            EUC_JP

原理的には、これでいいはずなんですが、ソフトウェアの制約やらなにやらで
期待する動作にならないかもしれませんが、その時はあしからず。

On Thu, 7 Apr 2005 11:42:57 +0900
"kk" <noritamag @ hotmail.com> wrote:

> こんにちは。kkと申します。
> 
> 【起きている現象】
> IBM拡張文字(0xFA40〜0xFC4B)を、MS-Access
> のリンクテーブルから、ODBCドライバ経由でDB
> に格納した後、phpからブラウザ表示すると、文字が
> 化けてしまう。
> PsqlEdit(Psqlのエディタ)を用いてIBM拡張文字を
> 格納しても、同様に化けてしまう。
> 
> 以下に例を示すと、
> 
> 1.さんずいに位という漢字(SJISの文字コード:"FB40")
>  をPostgreSQL ODBCドライバ経由でDBにインサート。
> 
> 2.phpを用いてブラウザで表示したところ、「諸j」という
>  文字列(eucの文字コード:"8fc7cb")に変換されて表示
>  されてしまう。

DB には正しく入っているようですね。

> 一方、
> http://www.rikai.com/library/kanjitables/kanji_codes.euc.shtml
> で調べたところ、「さんずいに位」という漢字のEUCの文字
> コードは "FAE3" とのことであったので、以下の手順を
> 踏んでDBに格納したところ、phpを用いてブラウザから表示
> しても正しく表示されました。

eucJP-open(PHPでは eucJP-win) では、8F C7 CB
CP51932                       では、FA E3

になります。
ブラウザで表示させる場合は、CP51932 でなければ文字化けします。
ある意味では、正常な動作(文字化けして当然)という事になります。

> 1.sjisの"FB40"をバイナリでFreeBSDにアップロード
> 2  sjis -> euc変換スクリプトを使って "FB40" 
>   を "FAE3" に変換。
> 3.\copy でDBにインポート
> 
> しかし、今度は、Accessのリンクテーブルや、PsqlEdit
> から "FAE3" の文字を参照すると、「・」と表示されて
> しまいます(EUCの文字コードなので当然ですが)。
> 
> 【お聞きしたいこと】
> IBM拡張文字に関して、
> SJIS側(Accessのリンクテーブル、PsqlEdit)からも、
> EUC側(PHPでブラウザ表示)からも文字化けさせない
> 手段はないものでしょうか?

HTMLの文字コードは EUC を使わずに、Windows コードページ 932 (シフトJIS
エンコーディング) を使うのが一番確実でしょう。
> 
> また、IBM拡張文字を含め、SJIS⇔EUC の変換テーブル
> は、各ソフトウェア(ミドルウェア)毎に持っているもの
> なのでしょうか?

そう考えておいたほうがいいでしょう。

一応、UNIX 系では TOG/JVC で eucJP-open が定義されています。
http://www.opengroup.or.jp/jvc/cde/sjis-euc.html

Windows のコードページ51932 は、その定義は明文化されていないのではない
かと思われます。

> "[pgsql-jp: 30677] ACCESSから漢字3が文字化け"
> "[pgsql-jp: 30762] 漢字3とは"
> をはじめ、ネットでいろいろ調べては見たのですが、
> 解決策が見つからず、ご相談させて頂きました。

> まだまだ勉強不足ではございますが、ご教示の程、
> 宜しくお願い致します。
> 
> ----- 開発環境 -----
> [web/dbサーバ]
> PHP 4.3.3
> Apache 1.3.33 
> PostgreSQL 7.3.4 (EUC-JP)
> FreeBSD 5.0
> 
> [クライアント]
> Windows 2000
> Access 2000
> ODBCドライバ 7.03.02.08
> PsqlEdit 3.0.4.1

‖森山 将之 (MORIYAMA Masayuki)
‖e-mail: msyk @ mtg.biglobe.ne.jp





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