WebサイトのクローラーでWebページを集めたファイルがあります。このクローラーは問題があり、全てのページがUTF-8であることが前提となっています(改修する予定です)。
例えば2つのWebサイトをクロールしたとします。
- WebサイトA - EUC-JPでエンコードされている
- WebサイトB - UTF-8でエンコードされている
これを1つのテキストファイルに押し込んだ結果、サイトAのテキストが全部文字化けした1つのテキストファイルができました(このバグは直しますが既に集めたデータは壊れています)。このファイルはJSONになっていて、1行に1つのサイトのデータが入っています。
ここで
java
1char [] array = in.toCharArray(); 2StringBuilder sb = new StringBuilder(); 3 4for( char ch : array ) 5{ 6 boolean condition1 = Character.UnicodeBlock.of(ch).equals(CJK_UNIFIED_IDEOGRAPHS); 7 boolean condition2 = Character.UnicodeBlock.of(ch).equals(BASIC_LATIN); 8// boolean condition3 = Character.UnicodeBlock.of(ch).equals(CJK_COMPATIBILITY_IDEOGRAPHS); 9 10 if( condition1 || condition2 ) 11 { 12 sb.append(ch); 13 } 14 else 15 { 16 // この文字は使わない 17 } 18
のようなコードを書いています。意図するものはCJKかBASIC_LATINに属する文字の場合だけ残すことです。あとひらがな、カタカナも許可しますがここでは割愛します。
このコードで文字化けした行を読むと、condition1のところでchはNULLではないはずですが、NullPointerExceptionになります。
質問
- 同じ内容のRubyコードでは止まらずに処理できます(速度面でJavaで行いたい)
- arrayは文字の配列のはずが、nullが含まれることがあるように見える
- これを回避する方法はありませんか?
- JDKのバグだとしたら、その報告は出ていませんか? NullPointerExceptionは一般的過ぎて検索で絞り込めませんでした
- 目的は壊れたデータを含むWebデータから有効な文字だけ取り出して処理することです。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー