2006/09/03

BufferedReaderで文字化け

FC5に構築したサーバーで、アップロードしたCSVファイルの内容をデータベースにセットする機能をテストしたところ、文字化け発生。

Windows、MacOSXでは問題なかったのだが。違いはJDKのバージョン...??

CSVファイルから一行読み込んだ際のStringの内容がFC5だけ違う。コードはこう。

FileItem item <<--- DiskFileUploadから取得

File csv = new File(".", uploadedCSVfileName);
item.write(csv);
FileReader fileReader = new FileReader(csv);
BufferedReader bufReader = new BufferedFileReader(fileReader);

String readLine = bufReader.readLine();
// ここでreadLineの中身が文字化け。


アップロードしたファイルの中身のエンコードは"Windows-31J"。こうやって取得したreadlineを、このあとどういじくろうともダメ。

試行錯誤の結果、BufferedReaderの作り方を変える。

InputStream stream = item.getInputStream();
InputStreamReader reader = new InputStreamReader(stream, "Windows-31J");
BufferedReader BufferedReader = new BufferedReader(reader);


String readLine = bufReader.readLine();
// 正しく取得


悩ましいもんです。

2006/08/24

文字化け on MySQL 5.0.22

MySQL 5.0.22 (on FC5)へアプリケーション移設したところ発生した日本語の文字化け。全ての日本語がクエスチョンマークに変わって表示されてしまう状態。

Hibernateを用いてMySQLにアクセスしているが、Hibernateを使っていないアプリケーションでは文字化けが発生していない。DBにおける全ての文字コード設定は"UTF8"で統一。DB内には正しく日本語が格納されている。Hibernateの設定か・・・

hibernate.cfg.xml内のプロパティ値、"connection.url"に"useUnicode=true&characterEncoding=utf8"を追加してみても変化無し。思えば今までHibernate側で文字コードを意識等した事無かった。

今まで使用していたMySQLのバージョンは違うにせよ、正常に表示出来ているアプリケーションもあるのでMySQLのせいでは無さそう。では違いは

・・・JDBCコネクタ・・・

確かに正常に表示されるアプリケーションが抱えているJDBCドライバとHibernateで動作させているアプリケーションのそれとはバージョンが違った。正常表示出来るアプリケーションのJDBCコネクタと置き換えてみる。

!! 日本語正常表示 !! insert / update も問題無し。

あやうくMySQLやHibernateのせいにしそうなところであった。
JDBCコネクタ等の類いをきちんとメンテナンスしていなかったことが原因だ。

たいそうなタイトルを付けたが、他の人にはあまり参考にならない情報でしょう。
正常に表示された日本語があまりに美しかったので・・・

2006/08/03

Beanのデフォルトコンストラクタ

今日はこんな事にハマった。

セットアップしたFC5のTomcat5.5に、既存のWebアプリケーションをDeployして動かしてみようと思ったが、JasperException発生。詳細な内容も良く分からない・・・

原因は、JSPに渡すJavaBeanにデフォルトコンストラクターの定義が無いためみたい。Interface渡しでも怒られるので、修正量も多そう。

Tomcat4の時から怒られたかった・・・

2006/08/01

LLによるアプリケーション開発

Lightweight Language(LL)によるアプリケーション開発が流行らしい。

今までJavaでサーバーサイドアプリケーションを設計・実装・保守を行なっていた人間にしたら、LLの情報は正に魔法の呪文のようだ。わたしもついLL本を購入してチュートリアルに則り、魔法の世界へ。

でも呪文は呪文。スクリプトや正規表現を理解していないと、分かったような分からないような。理解出来ている実感が湧かないのは寂しい。

それにどのLLに乗るか・・・色んなLLや開発環境もあるみたいだし。
一応買ったLL本はRuby On Rails。

素人ではあるが、無理矢理に業務に取り込んで必要に迫られる環境に自分を追い込む必要があるな。そうでもないと、きっと勉強しないような気がするし。