[pgsql-jp: 26956] Re: UCS-2 文字を利用したい

SEIJI SUGAHARA/NIDEC SEIJI_SUGAHARA @ notes.nidec.co.jp
2002年 8月 8日 (木) 20:08:49 JST


菅原です。
たびたびすみませんが、もうすこしお付き合いください。

一度整理させていただきます。
<目的>
JSPで、Web画面からユーザが入力した文字をいったんデータベース(PostgreSQL)
に格納した後、
ふたたびWeb上に表示したい。ただし、そのユーザが入力する文字は機種依存文字も
含む

<今までの作業>
・機種依存文字を利用するためのパッチファイルをあて、Unicode(UTF-8)のデータ
ベースを作成

ここからJavaの話になってしまいますが申し訳ないです。
今までJSPファイルをEUCで表現していました。(charset=euc-jpと記述)
しかし、EUC_JPでは機種依存文字には対応できないということで、ここがまず失敗
なのですね。
それで、UTF-8コードで最初から最後まで表現
(=ユーザの入力文字をUTF-8→UTF-8データベースに格納→UTF-8でWeb表示)するべ
く、
「charset=utf-8」とJSPファイルを書き換えてみたのですが、jasperコンパイラが
ファイルを読み取れないとの
エラーがおきてしまいます。
jasperコンパイラ(Tomcat3.2.1を使用しております)に何か修正をかけないといけ
ないのでしょか?
発言の場を間違えているかもしれませんが、お願いいたします。





Eiji Tokuya <e-tokuya @ sankyo-unyu.jp>@ml.postgresql.jp 2002/08/03 14:43:23

pgsql-jp @ ml.postgresql.jpに返信してください

送信者:   pgsql-jp-admin @ ml.postgresql.jp


宛先: pgsql-jp @ ml.postgresql.jp
cc:
件名: [pgsql-jp: 26894] Re: UCS-2 文字を利用したい


徳家です。

> 以前は説明しなかったのですが、
> PostgreSQL+JSP+ApacheでWebから

> そこで、文字コードの流れを抑えることが重要なのですが、
> 今までは、
> (ユーザ入力文字 EUC_JP) ⇒ (JSPで文字取得 その際、EUC_JP⇒Unicodeに
変
> 換 *1) ⇒
> (postgreSQLにinsert Unicode)【PostgreSQLエンコード=Unicode】  ⇒
(Web
> 表示 PostgreSQLから取得した文字をEUC_JPとして表示)
>
> と考え、現にたいていの文字はうまくいきました。
>
> *1 Javaソース
> String(s.getBytes("8859_1"),"EUC_JP") といった感じで。

JavaでEUC-JPに変換しているのですね。
しかも、8859_1は半角文字だし…。(..;)
# いつも思うのですが、日本語を使うのにナゼ8859-1などが
# 登場するのか疑問です。(^^;;;;

Javaのエンコード変換は、EUC-JPでは全くIBM拡張漢字に
対応していません。

PostgreSQL話題とは全くの無関係状態の話ですね。
JavaソースのエンコードがUCS-2かUTF-8と思っていたもので…。

> そこで教えていただきたいのですが、今回のパッチというのは、ユーザがどのよ
う
> なコードでIBM拡張文字を入力しても、
> postgreSQLできちんと解釈してくれるものと都合よく解釈してしまっているので
す
> が、間違いでしょうか?

菅原さんの言ってるのはエンコードの自動判別ですよね。
それなら違いますね。
エンコードの自動判別には正しく判別するのには、ある程度長い文字列が必要で
す。
DBは短い文字列だけで利用することも多いので、自動判別には向きません。
よって、利用する文字集合を明確に設定して使います。

PostgreSQLの場合はエンコーディングの設定にはDB本体のエンコーディング
ともう1つ、ユーザーがpsqlで表示したり、JavaやCなど各言語でPostgreSQLを
利用したアプリケーションを構築する時に表記使うエンコーディングを指定
します。これを『クライアントエンコーディング』といいます。
つまり、PostgreSQLはコード変換機能を内蔵しているのです。

JavaのソースをEUC-JPで記述したなら、PostgreSQLのクライアントエンコー
ディングをEUC_JPにしてあげればいいのです。
*1のようなコード変換はJavaでは行わなくて結構です。

> このパッチファイルでどのようなことができるのでしょうか?
> 重ね重ね申し訳ないのですが、よろしくお願いいたします。

パッチなしでは、UNICODE<->EUC_JPの変換をJIS規格の最低限の文字の範囲
で変換します。機種依存文字は全く変換しません。
よって、IBM拡張漢字はもちろん外字も、囲み文字も対応していません。
業務などの利用では、『(株)』などの囲み文字はよく使いますが、
UNICODEでは存在するものの、それらは機種依存文字なのでよって
UNICODE<->EUC_JPでは対応していません。

PostgreSQLは、7.0よりEUC_JPでもWindowsの機種依存文字が使えます。
ですから以前よりDBをEUC_JPで利用することを推奨していましたが、
このパッチで、DBをUNICODEで利用してもDBをEUC_JPで使っていたとき
と同等に使えるようになるのです。
これで、EUC_JPからUNICODEへのステップアップも簡単になります。
『だからなんなの?』と思われるかもしれませんが、業務で使うDBの
価値は歴然と違います。

UNICODE(UTF-8)の方が文字数が多くて便利と思っていても、EUC_JPの
DBで登録したデータが酷く破損してしまっては意味が無いので、
UNICODEにステップアップを控えているPostgreSQL利用者も多いと思います。

このパッチはそれらを解消します。

パッチをあてると、そのデータの破損を最低限(絶対とは言えませんが)
におさえます。
(株)や(有)などの囲み文字も安心して利用できます。

勿論、後にUTF-8でクライアントアプリケーションを構築すると
マルチリンガルなDBになり引続き利用できるのです。
要するに中国や韓国の漢字も利用可能になるので、無いと諦めていた
人名漢字の殆どが入力可能になります。

パッチは日本語に関しては、文字化けや文字の欠落などによる、データ
の破損を防ぐのが第一の目的です。
利用のOSやフォント、構築されたアプリケーションが対応しているか
どうかはパッチもPostgreSQLとも関係ありません。


徳家






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