はじめて投稿させていただきます。
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 の 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
はじめて投稿させていただきます。
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 の 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