2014年5月16日金曜日

Excelからのcsvをjava.nioで読んだらMalformedInputException

環境

  • Mac OS X Lion
  • Java 7
  • 元ファイルは素性のしれないxlsx
  • Excel 2011

経緯


素性のしれないxlsxをExcelでcsvにした

こんな読み込みをしていて
こんな例外が

java.nio.charset.MalformedInputException: Input length = 1

元のファイルを見てみる

$ file --mime fuga.csv
fuga.csv: text/plain; charset=unknown-8bit

unknownとかいっちゃってる。

sublime Textで、UTF-8 で保存しなおす。

$ file --mime fuga.csv
fuga.csv: text/plain; charset=utf-8

わーい。
これで読み込めた。


追記

そもそもなんだけど、Excelでcsv出力すると、S-JIS(固定)らしい。

別件で、InputStream扱うときに

BufferedReader br = new BufferedReader(new InputStreamReader(hoge.getInputStream(), "SJIS"));

List<String> stringList = new ArrayList<>();
while(br.ready()) {
    stringList.add(br.readLine());
}
br.close();

とかで読み込みできた。

ちなみに、hogeはSpringのMultipartFileです。