POI2.5.1で作成したエクセルファイルをWindows98,MEから参照すると文字化けする。
HSSFWorkbook#createFont(String)において生成したフォントがセルにセットされたエク
セルファイルをWindows98,Meクライアントで参照した場合、セル内の日本語が縦長の□□
に化ける現象が発生する。
原因:
HSSFWorkbook.createFont(String)で生成されるHSSFFontインスタンスの情報不足。
excelfileformat.pdfの6.43 Font によると、FontRecordにはcharset情報を指定する必要
がある。
charset情報はHSSFFontの中ではfield_8_charsetとして表され、ANSI Japanese Shift-
JISの使用時には0x80(-128)がセットされるべきである。
しかし、HSSFWorkbook.createFont(String)で生成されたインスタンスにはこの値が0固定
でセットされており、不具合の原因となっている。
回避策:
その1.
テンプレートファイルを使用し、wookbook.getFontAt(int)でフォント情報を取り出すようにする。
その2.
HSSFFontクラスに以下の様な定数と、メソッドを追加する。 public static byte C_SHIFT-JIS = -128; public void setCharset(byte charset) { font.setCharset(charset); } 呼び出し側は以下のようにcharset情報をセットする。 HSSFFont font = HSSFWorkbook.createFont("MS Pゴシック"); font.setCharset(HSSFFont.C_SHIFT-JIS);