Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

Apache POIの特殊文字(?←コレ)の出力方法について

■POIのバージョン:poi-3.2-FINAL-20081019.jar

お世話になっております。
表題の件についてご教授ください。

?をRichTextStringでHSSFCellにセットすると文字化けします。
試行錯誤しましたが解決できず質問させていただきました。
よろしくお願いいたします。

試したこと
・UTF-16にエンコーディングしようと思いましたが、
 現状のバージョンのPOIにはsetEncodeingメソッドが存在せず断念
・?をUTF-16の”2460”にしてセットしてみた
・フォントを設定していないと文字化けする記事があったので確認済み



6

回答

587

閲覧

6件の回答

評価

0

クエスチョンマーク?特殊文字と言うからには違いそうだが…。
環境(機種)依存文字を書いてないか?書いてるものが分からなければ試しようもないぞ。

評価

0

すみません、この掲示板でも変換できていませんでした。正しくはutf16の「2460」にある丸枠付きの1です。

今回の文字化けは、webアプリケーションのみで発生します。javaのデフォルトエンコーディングはms932です。javaで機種依存文字をwindows-31jにエンコーディングしてやればいいのでしょうか?ご教示ください。

評価

0

手元にあった3.0と3.8では特に問題ないな。何らかロジックがおかしいか、文字列によるのか、バージョン特有の問題か。Windows以外の環境だとだめか。
//(*)は実際には丸付き数字
HSSFWorkbook b=new HSSFWorkbook();
b.createSheet("0").createRow(0).createCell((short)0).setCellValue(new HSSFRichTextString("(1)(2)(3)(4)(5)");
try(BufferedOutputStream o=Files.newOutputStream(Paths.get(...))){
b.write(o);
}catch(Exception e){
e.printStackTrace();
}

評価

0

Servlet?で出力したxls自体は文字化けしていなくて、それをダウンロードすると文字化けするってことですか?

状況がよくわからないので、問題が再現するミニマムコードを提示してもらえませんか?

ちなみに匿名氏と同様のコードで3.2でも問題なく出力できました

評価

0

サーブレットで動的にxlsファイルを作ってるんじゃなくて、サーブレットで動的に作ったxlsデータをそのままレスポンスに出してる?
データはバイナリだし、途中で何かフィルター通ってるのでもなければそのまま落ちるはずだけどな。

評価

0

new HSSFRichTextString("u2460")でも当然問題なし。
一瞬頭0で5桁以上指定してないかとか思ったが、サーブレットでなければ発生しないと言ってるのでそんなことはないな。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。