2013年9月16日月曜日

Java UTF-8(Shift-JIS)の取り扱いTips

JavaでUTF-8を扱おうとするとよくぶつかるencoding問題を
ちょっとまとめてみる(Shift-JISも同様)

1.ファイル読み込み

ファイルを読み込む際にreadlineが途中で終わってしまう場合
一番簡単な解決法はcommons-ioを使う
Java標準のFileReaderはマルチバイト対応してないよう


import org.apache.commons.io.FileUtils;
import org.apache.commons.io.LineIterator;


        LineIterator it = null;

        try {
            it = FileUtils.lineIterator(file, "UTF-8");

            while (it.hasNext()) {
                String line = it.nextLine();
            }
         } catch (Exception e) {
            e.printStackTrace();
         } finally {
            LineIterator.closeQuietly(it);
         }
        



2.URLConnectionでUTF-8指定

 InputStreamReaderでUTF-8を指定する


URL url = new URL("your url");
BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8"));

StringBuilder builder = new StringBuilder();
String str;

while (null != (str = reader .readLine())) {
    builder.append(str).append("\r\n");
}
reader.close();
str = builder.toString();




3.XMLパーサでのUTF-8指定

parserにXMLInputSourceでUTF-8指定
例では、URLConnectionからデータ取得


     DOMParser parser = new DOMParser();
            parser.setFeature("http://xml.org/sax/features/namespaces", false);
            parser.setFeature("http://cyberneko.org/html/features/scanner/notify-builtin-refs", true);
               
            BufferedReader reader = new BufferedReader(new InputStreamReader(       url.openStream(), "UTF-8"));
           
            XMLInputSource source = new XMLInputSource(null, "Element", null,
                    reader, "UTF-8");
           
            parser.parse(source);

            Document document = parser.getDocument();

4.MySQLで文字化ける


内部エンコーディング、入力、DB全部UTF-8で統一していても文字化けする場合
database urlにcharacterEncodingを指定する


jdbc:mysql://localhost/schema?useUnicode=true&characterEncoding=UTF8

jetty jndiではuseUnicode=trueが指定できないので
characterEncodingのみ指定



0 件のコメント: