[Seasar-user:13199] Re: [S2JDBC]SQLファイルをUnicodeサイン(BOM)を付けてUTF-8で保存するとエラー

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2008年 3月 9日 (日) 05:00:31 JST


小林 (koichik) です.

Date:    Sun, 9 Mar 2008 00:59:59 +0900
From:    出羽 健一 <[E-MAIL ADDRESS DELETED]>
To:      <[E-MAIL ADDRESS DELETED]>
Subject: [Seasar-user:13197] [S2JDBC]SQLファイルをUnicodeサイン(BOM)を付けてUTF-8で保存するとエラー

> S2JDBC(s2-tiger 2.4.22)でSQLファイルを
> Unicodeサイン(BOM)を付けてUTF-8で保存すると
> 例外が発生してしまいます。
> 
> 上記の場合でも動作するようにするか、
> それとも、分かりやすいエラーメッセージを表示するなどの
> 改善を検討して頂きたいので、よろしくお願いします。

まず,理屈の上ではその U+FEFF は BOM ではなく,
ZERO WIDTH NO-BREAK SPACE であり,一種の空白です.

一種の空白に過ぎないので,S2JDBC は通常の空白と
同じようにそのまま SQL の一部として JDBC ドライバに
渡します.
これは RFC3629 の次の記述とも合致します.

----------------------------------------------------------------------
A protocol SHOULD forbid use of U+FEFF as a signature for those
textual protocol elements that the protocol mandates to be always
UTF-8, the signature function being totally useless in those
cases.
----------------------------------------------------------------------

S2JDBC の SQL ファイルのエンコーディングは
UTF-8 決め打ちになっているので,その場合に
U+FEFF を signature (BOM) として使うことは,
禁止すべき (SHOULD forbid) なのです.

で,JDBC ドライバが ZERO WIDTH NO-BREAK SPACE を
SQL の一部として扱えるなら動作するだろうし,
扱えないなら例外になるでしょう.
例外になる場合,メッセージの分かりやすさは
JDBC ドライバに依存します.
S2JDBC としてはそれだけです.

ただし,S2 は伝統的 (?) に後処理で例外が発生すると
元の例外が失われてしまうので,そのために原因が
分かりにくくなっているならそこは改善の余地ありかも.

ともあれ (JW),ZERO WIDTH NO-BREAK SPACE を
扱えない JDBC ドライバを使うなら,SQL ファイルに
ZERO WIDTH NO-BREAK SPACE を入れないように
すべきです.

これは,日本語を扱えない JDBC ドライバを使うなら
SQL 中に日本語を含めないようにしてください,と
いうのと同じです.

個人的には UTF-8 で BOM として U+FEFF を強制的に
付けるような腐ったエディタは捨ててしまうことを
オススメします.
メモ帳とかメモ帳とかメモ帳とか.
他にもあるなら片っ端から捨ててしまいましょう.
UTF-8N とか意味不明なこと言ってるエディタも
捨てましょう.


と言いつつ,先頭の U+FEFF を取り除くことは
簡単だし,そうした方が使う人にとって都合が
いいならそうするのが Seasar っぽいのかも
しれませんが.


-- 
<component name="koichik">
    <property name="fullName">"Koichi Kobayashi"</property>
    <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
    <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>



Seasar-user メーリングリストの案内