Apex内で生成した文字列は文字コードがUTF-8であるため

以下のようなコードだと添付ファイルは全てUTF-8で作成されます。

そこで、Apexのみを使ってUTF-8以外の文字コードのファイルを作成するには

以下のように書くことで実装できます。

※パーセントエンコーディングされる文字列のみ含む前提です。

ポイントとしては以下のとおりです。

  • Apexで任意の文字コードのバイト列を直接取得するメソッドがない。
  • EncodingUtil.urlEncodeを使えばASCII等のURIとして利用できる文字種以外は
    指定の文字コードでパーセントエンコーディングされた文字列を取得できる。
  • パーセントエンコーディングされた文字列はバイト列の16進数表記なので
    convertFromHexでバイト列に戻せる。

利用出来る文字コードですが、おそらくJavaで利用できるものはOKだと思われます。

サポートされているエンコーディング

パーセントエンコーディングされない文字列は予め正規表現等で処理しておく必要があります。

 

また、エンコーディングに失敗すると、失敗した文字列が「?」に変換されるようなので

任意の文字列が文字コード変換後に任意のエンコーディングに

対応しているかどうかの確認も可能です。

(予め「?」自体の文字列を取り除いてからEncodingUtil.urlEncodeでバイト列取得する感じ)

 

参考URLはコチラ↓

memo: Force.com : VF 画面から CSV ファイルをアップロードし、内容を画面に表示したい (ファイル文字コード Shift_JIS 編)

ちなみにVFを介すのであればapex:pageタグのcontentTypeを指定すれば良いので楽ちんです。