--> -->

skimemo


skimemo - 日記/2014-08-10

_ IlohaMailでCP932を表示する

IlohaMailは一応一通りの日本語エンコードに対応しているようで、lang/jp/jcode.inc にも以下のコメントがあります。

■lang/jp/jcode.inc

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
-
|
|
|
//0:AUTO DETECT
//1:EUC-JP
//2:Shift_JIS
//3:ISO-2022-JP(JIS)

(UTFはたぶんjp以外の所で対応)

しかし、auのezwebメールは、こんなcharsetで本文を送ってくるため、デコードできずに化けてしまいます。

■ヘッダーの記述

Content-Type: text/plain; charset=cp932

■本文

���C����H
8��9��`12��(3��4��j�淀����B

そこで、とりあえず読めれば良いので、CP932をSJISと見なして変換させます。
変更箇所は1カ所。

■lang/EUC-JP.inc
まずCP932を対応文字セットとして追加します。

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
 
 
 
 
 
 
 
    $CS_CAN_CONVERT["ISO-2022-JP"]=1;
    $CS_CAN_CONVERT["EUC-JP"]=1;
    $CS_CAN_CONVERT["X-EUC-JP"]=1;
    $CS_CAN_CONVERT["Shift-JIS"]=1;
    $CS_CAN_CONVERT["JIS"]=1;
    $CS_CAN_CONVERT["ISO-8859-1"]=1;
    $CS_CAN_CONVERT["CP932"]=1;

次にCP932の場合はJcodeConvertでのAUTO DETECTが効かなかったので、if文で分けて処理します。

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
-
-
|
-
|
!
-
    }else if (strcasecmp($charset, "x-euc-jp")==0){
        if ($from_charset=="CP932"){
            return JcodeConvert($string, 2, 1);
        } else {
            return JcodeConvert($string, 0, 1);
        }
    }else{


これで正常にデコードされるようになりました。

Category: [Linux] - 11:01:02



 
Last-modified: 2014-08-10 (日) 11:01:03 (3540d)