掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
IMapの受信時にiso-2022-jpのdecodeの変換方法をお教え願います。 (ID:149370)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
ISO-2022-JPを変換する処理は公開しますが、他の変換は自力でなんとかしましょう。 あとWindpws10のメールソフトはなぜかUnicode直接送ってくるので鬼門です。 //--------------------------------------------------------------------------// // // // ~ ISO-2022-JPを変換してShiftJIS文字列にする ~ // // // // - Input - str : ISO-2022-JPの文字列 // // // // - Output - ShiftJISへコード変換した文字列 // // // //--------------------------------------------------------------------------// function Iso2022jpToStr(const str: string): string; var s : Ansistring; sr,se : Ansistring; c : AnsiChar; i,n,c1,c2 : Integer; begin s := Ansistring(str); n := 0; c1 := 0; for i := 1 to Length(s) do begin // 文字の長さ分ループ c := s[i]; // 1文字取得 if c = #$1b then begin // エスケープコード #$1B の場合 n := 1; // 次の2バイトは制御コードとする se := ''; // 制御判定用文字列の初期化 end else begin // エスケープコードではない場合 case n of // 処理段階に応じて分岐 0 : sr := sr + AnsiChar(c); // 通常はASCIIコードとして処理する 1 : begin // 制御コードの1バイト目の場合 se := se + AnsiChar(c); // 制御コードとして蓄積 n := 2; // 次は制御コード2バイト目とする end; 2 : begin // 制御コード2バイト目の場合 se := se + AnsiChar(c); // 制御コードとして蓄積 if se = '$B' then n := 3; // $B なら以降はJISコードとなる if se = '(B' then n := 0; // (B なら ASCIIコードに戻る end; 3 : begin // JISコード1バイト目の場合 c1 := Ord(c); // JISコード1バイト目として格納 n := 4; // JISコード2バイト目の処理へ end; 4 : begin // JISコード2バイト目の場合 c2 := Ord(c); // JISコード2バイト目として格納 n := 3; // JISコード1バイト目の処理へ sr := sr + JisToSJis(c1,c2); // JISコードをShiftJISに変換して処理 end; end; end; end; result := string(sr); // 返り値とする end; //--------------------------------------------------------------------------// // // // ~ JISコードをShift-JISコードに変換 ~ // // // //--------------------------------------------------------------------------// function TJisToSJis(Code1, Code2: Integer): Ansistring; var s : string; begin if (Code1 and $01) <> 0 then begin Code2 := Code2 + $1f; end else begin Code2 := Code2 + $7d; end; Code1 := ((Code1 - $21) shr 1) + $81; if Code2 >= $7f then Inc(Code2); if Code1 > $9f then Inc(Code1,$40); s := IntToHex(Code1,2) + ' ' + IntToHex(Code2,2); result := AnsiChar(Code1) + AnsiChar(Code2); end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.