QA@IT

iso-2022-jpのエスケープシーケンスが抜け落ちた際の復元

3896 PV

mail gemを使って受信したメール本文を処理するにあたり、ESCが抜け落ちている本文を復元してdecodeしたいのですが、rubyでどう書けばよいのかが分からなくてご教示願いたいです。

  • 文字列
$BCmJ8HV9f(B
  • シェルで行う場合
$ echo '$BCmJ8HV9f(B' | sed -e `echo -en "s/\\$B/\033\\$B/g"` | sed -e `echo -en "s/(B/\033(B/g"` | iconv -f iso-2022-jp -t utf-8

# => 注文番号

宜しくお願いいたします。

  • ちなみに、
    sed -e `echo -en "s/\\$B/\033\\$B/g"`| sed -e `echo -en "s/(B/\033(B/g"`
    は、
    sed -e $'s/$B/\e$B/g' -e $'s/(B/\e(B/g'
    と書けます。
    -

回答

以下ではどうでしょう。

require 'kconv'

str="$BCmJ8HV9f(B"
puts str.sub(/\$B/,"\x1b$B").sub(/\(B/,"\x1b(B").toutf8
編集 履歴 (0)
  • 完璧です!ありがとうございました! -

既に回答がありますが、

str="$BCmJ8HV9f(B"
puts str.gsub(/[$(]B/,"\e\\0").force_encoding(Encoding::ISO_2022_JP).encode(Encoding::UTF_8)
編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。