[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 メーリングリストの案内