2015-08-02

Apexで文字コード変換

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

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

String result = 'あいうえお漢字カタカナ';
Attachment att = new Attachment();
att.Body = Blob.valueOf(result);
att.Name = 'hoge.txt';
att.parentId = '001A000000rJ9he';
insert att;

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

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

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

String result = 'あいうえお漢字カタカナ';
String encodedResult = EncodingUtil.urlEncode(result, 'Shift-JIS').replaceAll('%','');

Attachment att = new Attachment();
att.Body = EncodingUtil.convertFromHex(encodedResult);
att.Name = 'hoge.txt';
att.parentId = '001A000000rJ9he';
insert att;

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

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

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

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

 

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

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

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

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

 

参考URLはコチラ↓

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

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

<apex:page contentType="text/plain;charset=Shift-JIS">あいうえお漢字カタカナ</apex:page>
このエントリーをはてなブックマークに追加