Oracle(Oracle9iR2のWindows版)のJavaストアドプロシージャを使ってファイルI/Oを行うファンクションを作成しました。
ところが、全角の日本語を含むファイル名やディレクトリ名を使用すると文字化けを起こすようで、正常に読み書きすることができません。
引数のデータ型を変えてみたり、Javaのメソッドの中でエンコードを指定したりいろいろ試してみましたが、現象は解消しません。
System.out.printlnを使って、Javaが受け取ったファイル名を出力してみると問題なく表示されているので、Fileインスタンスを生成する時におかしくなっているようです。
どうもVMの方に問題があるようです...
どうにも手に負えないので、Oracleサポートに問い合わせてもらいました。
すると、つい先日リリースされたパッチセット(PSR9.2.0.6.0)を適用すると解消するとの回答を得ました。
早速、PSR9.2.0.6.0を当てて、確認テストを行ってみると、見事解消されています^^
やはりバグでしたか...
昔からOracle上で(データ以外で)2バイト文字を使うとろくなことがないので、オラクラーたちの間では2バイト文字は使わないというのが常識となっています。
しかし、ファイル名のようにOracleの外部でも直接操作するようなものについては、最初から普通に2バイト文字を扱えるようにしてほしいものです。
Windows95の時代になってから、ロングファイル名がサポートされ、これによって日本語ファイル名も一般的に使われるようになりました。
ユーザーからも日本語ファイル名対応は絶対に譲れないと強い要望が出てくることが多々あります。
そんな要望に対してソフトが対応していない場合、「ソフトが対応してないからできません。」なんてむげに断ることもできないから、一旦英数字のファイル名に変換するような処理をかますなどしてなんとか実現させたりするのですが、やはりあまりかっこいいものではないですから^^;
【関連エントリ】
[Oracle] Java ストアドプロシージャの利用法 2004/07/30
[Oracle] Java ストアドプロシージャで日本語ファイル名が扱えない 2004/12/27
[Oracle] loadjava ユーティリティが落ちる? 2006/06/29
[Oracle] Java ストアドプロシージャで Java クラス・ライブラリを使用する 2006/07/05
[Oracle] Java ストアドプロシージャで DLL を使用する際の注意点 2006/07/11