文字コード掲示板


一括購読


No.239投稿日時:2005/01/05(水) 23:01    <親記事>
投稿者:abc  <E-Mail>

webシステム(phpとPowerGresPlusの

はじめて投稿させていただきます。

LinuxEnterPriseESとphpとPowerGresPlus(PostgresSqlの製品版)の組み合わせでWebシステムを開発したんですが、PowerGresPlusのログに以下のようなエラーが出てDBに登録できませんでした。エラーメッセージからは、EUC−JPのコードの範囲外の文字を登録しようとして失敗していることがわかります。

Dec 11 01:17:22 revsv01 postgres_review[26917]: [2] ERROR: Invalid EUC_JP character sequence found (0x9509)
Dec 14 02:26:13 revsv01 postgres_review[27238]: [2] ERROR: Invalid EUC_JP character sequence found (0x9334)
Dec 14 02:28:21 revsv01 postgres_review[27271]: [2] ERROR: Invalid EUC_JP character sequence found (0x9354)
Dec 14 02:33:13 revsv01 postgres_review[27376]: [2] ERROR: Invalid EUC_JP character sequence found (0x9377)
Dec 14 02:40:00 revsv01 postgres_review[27495]: [2] ERROR: Invalid EUC_JP character sequence found (0x932d)

ここで、質問ですが、これら0x9509、0x9334、0x9354、0x9377、0x932dはどういう文字かを知りたいのですが調べる方法は何かないでしょうか。

尚、以下のような設定にしています。
PHPの文字コードの設定:EUC-JP
HTTP入力:auto(“auto”は、「ASCII,JIS,UTF-8,EUC-JP,SJIS」の順である)
HTTP出力:EUC-JP
PowerGresPlusの設定:EUC-JP

よろしくご回答願います。


No.240投稿日時:2005/01/06(木) 00:32    <↑親記事:No.239>
投稿者:森山 将之

EUC-JP の使いこなしは面倒です

EUC-JP の 2バイトコードは、1バイト目 0x8E,0xA1〜0xFE 2バイト目 0xA1〜0xFE の範囲になければなりませんので、エラーになっています。
EUC-JP のエンコードとして不正なコードですので、何の文字かはわかりません。

EUC-JPエンコーディングは、いろいろと厄介な問題がありますので、次のようにしてみてはいかがでしょう。(実際に確認していませんが)

[PHP]
HTTP入力: SJIS-win (文字コードの自動判定は OFF にする事)
HTTP出力: SJIS-win
内部エンコーディング: UTF-8

[PostgreSQL]
DB の入出力: UNICODE(UTF-8)
DB のエンコーディング: UNICODE(UTF-8)


No.241投稿日時:2005/01/06(木) 00:51    <↑親記事:No.239>
投稿者:森山 将之

ユーザ定義文字?

PHP の HTTP 入出力が EUC-JP となっている事を考えるとユーザ定義文字が文字化けしている可能性が考えられます。
IE では、EUC-JP をコードページ51932 で出力していますが、これはユーザ定義文字を扱えないコードページで、ユーザ定義文字はシフトJISのまま出力してしまうのでトラブルの元になるわけです。


No.242投稿日時:2005/01/06(木) 12:38    <↑親記事:No.239>
投稿者:森山 将之

デバッグ方法

次のどこで不正なEUC-JPコードに変換されているのかを調べる。

(1) ブラウザの文字コード変換 (この場合、POST されてくるデータが既に不正なコードになっている)
(2) PHP の文字コード変換
(3) PostgreSQL の文字コード変換

今回、PHP の内部エンコードコードと PostgreSQL のエンコードは同じようですので、(1) か (2) を調べるという事になると思います。

(1) は、PHP で受け取った生の POST データをログに書き出して調べる。
(2) は、HTTP 入力の文字コード判定機能を OFF にしてみることで、文字コードの自動判定で誤判定を起こしているかどうかを調べる。

という方法が考えられます。


No.243投稿日時:2005/01/06(木) 22:43    <↑親記事:No.242>
投稿者:森山 将之

デバッグ例

次の掲示板では、ブラウザが POST してくるデータを表示させ文字化けしないようにデバッグを行ないました。

http://www2d.biglobe.ne.jp/~msyk/cgi-bin/jikken2/ebbs.cgi?oe=Shift_JIS
http://www2d.biglobe.ne.jp/~msyk/cgi-bin/jikken2/ebbs.cgi?oe=EUC-JP
http://www2d.biglobe.ne.jp/~msyk/cgi-bin/jikken2/ebbs.cgi?oe=ISO-2022-JP
http://www2d.biglobe.ne.jp/~msyk/cgi-bin/jikken2/utf8form.html



No.239投稿日時:2005/01/05(水) 23:01    <親記事>
投稿者:abc  <E-Mail>

webシステム(phpとPowerGresPlusの

はじめて投稿させていただきます。

LinuxEnterPriseESとphpとPowerGresPlus(PostgresSqlの製品版)の組み合わせでWebシステムを開発したんですが、PowerGresPlusのログに以下のようなエラーが出てDBに登録できませんでした。エラーメッセージからは、EUC−JPのコードの範囲外の文字を登録しようとして失敗していることがわかります。

Dec 11 01:17:22 revsv01 postgres_review[26917]: [2] ERROR: Invalid EUC_JP character sequence found (0x9509)
Dec 14 02:26:13 revsv01 postgres_review[27238]: [2] ERROR: Invalid EUC_JP character sequence found (0x9334)
Dec 14 02:28:21 revsv01 postgres_review[27271]: [2] ERROR: Invalid EUC_JP character sequence found (0x9354)
Dec 14 02:33:13 revsv01 postgres_review[27376]: [2] ERROR: Invalid EUC_JP character sequence found (0x9377)
Dec 14 02:40:00 revsv01 postgres_review[27495]: [2] ERROR: Invalid EUC_JP character sequence found (0x932d)

ここで、質問ですが、これら0x9509、0x9334、0x9354、0x9377、0x932dはどういう文字かを知りたいのですが調べる方法は何かないでしょうか。

尚、以下のような設定にしています。
PHPの文字コードの設定:EUC-JP
HTTP入力:auto(“auto”は、「ASCII,JIS,UTF-8,EUC-JP,SJIS」の順である)
HTTP出力:EUC-JP
PowerGresPlusの設定:EUC-JP

よろしくご回答願います。


No.240投稿日時:2005/01/06(木) 00:32    <↑親記事:No.239>
投稿者:森山 将之

EUC-JP の使いこなしは面倒です

EUC-JP の 2バイトコードは、1バイト目 0x8E,0xA1〜0xFE 2バイト目 0xA1〜0xFE の範囲になければなりませんので、エラーになっています。
EUC-JP のエンコードとして不正なコードですので、何の文字かはわかりません。

EUC-JPエンコーディングは、いろいろと厄介な問題がありますので、次のようにしてみてはいかがでしょう。(実際に確認していませんが)

[PHP]
HTTP入力: SJIS-win (文字コードの自動判定は OFF にする事)
HTTP出力: SJIS-win
内部エンコーディング: UTF-8

[PostgreSQL]
DB の入出力: UNICODE(UTF-8)
DB のエンコーディング: UNICODE(UTF-8)


No.241投稿日時:2005/01/06(木) 00:51    <↑親記事:No.239>
投稿者:森山 将之

ユーザ定義文字?

PHP の HTTP 入出力が EUC-JP となっている事を考えるとユーザ定義文字が文字化けしている可能性が考えられます。
IE では、EUC-JP をコードページ51932 で出力していますが、これはユーザ定義文字を扱えないコードページで、ユーザ定義文字はシフトJISのまま出力してしまうのでトラブルの元になるわけです。


No.242投稿日時:2005/01/06(木) 12:38    <↑親記事:No.239>
投稿者:森山 将之

デバッグ方法

次のどこで不正なEUC-JPコードに変換されているのかを調べる。

(1) ブラウザの文字コード変換 (この場合、POST されてくるデータが既に不正なコードになっている)
(2) PHP の文字コード変換
(3) PostgreSQL の文字コード変換

今回、PHP の内部エンコードコードと PostgreSQL のエンコードは同じようですので、(1) か (2) を調べるという事になると思います。

(1) は、PHP で受け取った生の POST データをログに書き出して調べる。
(2) は、HTTP 入力の文字コード判定機能を OFF にしてみることで、文字コードの自動判定で誤判定を起こしているかどうかを調べる。

という方法が考えられます。


No.243投稿日時:2005/01/06(木) 22:43    <↑親記事:No.242>
投稿者:森山 将之

デバッグ例

次の掲示板では、ブラウザが POST してくるデータを表示させ文字化けしないようにデバッグを行ないました。

http://www2d.biglobe.ne.jp/~msyk/cgi-bin/jikken2/ebbs.cgi?oe=Shift_JIS
http://www2d.biglobe.ne.jp/~msyk/cgi-bin/jikken2/ebbs.cgi?oe=EUC-JP
http://www2d.biglobe.ne.jp/~msyk/cgi-bin/jikken2/ebbs.cgi?oe=ISO-2022-JP
http://www2d.biglobe.ne.jp/~msyk/cgi-bin/jikken2/utf8form.html


Script : Sylpheed 1.24
Modified by MORIYAMA Masayuki