【ColdFusion】cffileタグを利用しShift-JISでファイル出力する時の注意点について

最近は文字コードもUTF-8を利用する機会が多くなっている印象ですが、
未だにShift-JISを利用しているシステムも多くあるような気がしています。

最近嵌ったのですが、
cffileタグを利用してファイルを
Shift-JISで出力する時には注意が必要です。
Shift-JISにも複数種類が存在しており、下記の5種類が存在しています。

Shift-JISの種類について

種類 説明 呼び名
Shift_JIS オリジナルのShift_JIS Shift_JIS
NEC独自拡張Shift_JIS NEC特殊文字などを加えたもの PC-9800仕様OEM
IBM独自拡張Shift_JIS IBM拡張文字が加えられたもの CP943C
マイクロソフト標準Shift_JIS NECとIBMのいいとこ取り
※大体これが使われている
Windows-31J, MS932
アップル独自拡張Shift_JIS ※使われない Mac OS Japanese

Shift-JISで出力する際には大体「マイクロソフト標準Shift_JIS」で出力されているみたいですが、
cffileタグで「Shift-JIS」で指定すると表の一番上の「オリジナルのShift_JIS」で
変換処理が実行されてしまうようです。

「Shift-JIS」と「MS932」とでそれぞれファイル出力を行うサンプルコードと実行結果については下記の通りです。

サンプルコード/実行結果

<cfset outputData = "㈱あいうえお①Ⅰ髙かきくけこ">

<!--- NG --->
<cffile action="write"
       file="filename1.txt"
        output="#outputData#"
        addNewLine="no"
        charset="shift_jis">

<!--- OK(※Linux環境などにおいては別途処理が必要) --->
<cffile action="write"
       file="filename2.txt"
        output="#outputData#"
        addNewLine="no"
        charset="MS932">
// Shift-JISを指定した場合
?あいうえお???かきくけこ

// Windows-31J またはMS932を指定した場合
㈱あいうえお①Ⅰ髙かきくけこ

このように環境依存文字について「?」に変換されて出力されてしまっています。

◆対策ついて

Windows環境にColdFusionをインストールするとデフォルトでは
「MS932」が設定されている為、「charset=”MS932″」については
省略してしまっても大丈夫ですが、Linuxなどの他環境への移植も考慮して
「MS932」または「Windows-31J」と明記しておくと良いでしょう。

Linux環境ではデフォルトで「UTF-8」が指定されている為、
「Shift-JIS」を利用する時には「MS932」または「Windows-31J」を指定する必要があります。
※「MS932」または「Windows-31J」を利用するには別途作業が必要になります。

基本的にはUTF-8で出力すると思うのですが、
どうしてもShift-JISを利用しなければならない時には
気をつけておかないと痛い目を見ます(:3_ヽ)_

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です