更新については、以下を参照してください。
日本語のメールファイルのコードページを強制的に更新しようとしています。ファイルにはUTF-8のフラグが付けられていますが、日本語のテキストが正しく表示されていません。ヘッダーのエンコーディングを「UTF-8」から「shift-jis」に変更する必要があります。
これが手動で機能することを確認しましたが、このプロセスを自動化したいです。2つのsedコマンドの使用:
#sed -i 's/charset="shift-jis"/charset="shift-jis"/g' $VariableForLine
#sed -i 's/?UTF-8?/?shift-jis?/g' $VariableForLine
必要な変更を加えることができると信じています。メールの内容により、メールのヘッダーのみを変更するように制限する必要があります。私が標準として見ているフォーマットは次のとおりです。
From: "=?UTF-8?Q?JapaneseNameEncodedIncorreclty" <ono.koj@jpm.com>
To: "Yoshi Endo"
Subject: =?UTF-8?Q?????????????????=view=?UTF-8?Q????????????????
MIME-Version: 1.0
Date: Wed, 20 Feb 2006 10:30:22 0100
Content-Type: multipart/alternative;boundary="Next_Item:_(A3CB49KFSA19)/1"
This is a multi-part message in MIME format.
--Next_Item:_(A3CB49KFSA19)/1
Content-type: text/plain; charset="UTF-8"
?UTF-8?(example to skip)
Ÿž=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-Ÿž
Japanese Content
Ÿž=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-Ÿž
?UTF-8? (example to skip)
ここには、ログインしてください
----------------------------------------------------------------
Mixed content
***************************************************************************
Mixed content
***************************************************************************
--Next_Item:_(A3CB4g7FSA19)/1--
上記の2つのコマンドをファイルに対してループで実行することは機能しているように見えますが、残りの電子メールの内容のために、ファイルのヘッダーと直後のcharset変数のみが変更されていることを確認する必要があります。
私が作成した擬似コードは次のとおりです。
for each file in directory of type eml
do
read file line by line
if line contains "charset=" replace with ??
break
else
if line contains ?UTF-8?
replace ?UTF-8? with ?shift-jis'
exit
ifステートメントの最初の句に関するさらなる問題は、 "charset ="文字列にエンコーディングが適用されていない可能性があることです。UTF-8またはANSIである可能性があるため、charset =の最初のインスタンスを検索してから、文字列を変更する必要があります。後に続く「」内の文字を追加または置換します。
私が現在問題を抱えているコードを以下に示します(構文の理解が不十分なことをお許しください)
#!/bin/bash
for file in ./*
do
cat $file | while read myline
do
if $myline |grep "charset="
then
echo $myline
#echo $myline #this prints all the content
fi
done
#sed -i 's/charset="shift-jis"/charset="shift-jis"/g' $LINE
#sed -i 's/?UTF-8?/?shift-jis?/g' $LINE
done #end
これまでのすべての入力に感謝します。とても有難い。
編集:私は解決策を持っています
for file in `find ./ | grep .EML`
do
sed -i 's/charset=".*"/charset="shift-jis"/' $file
sed -i 's/?UTF-8?/?shift-jis?/' $file
done
ITはヘッダーを考慮しませんが、電子メールにcharset =コードの他のインスタンスがない場合は、問題ありません。