[mew-dist 22715] Re: newline code of attached euc-jp text
Kazu Yamamoto ( 山本和彦 )
kazu at example.com
2002年 12月 25日 (水) 15:01:15 JST
From: NABEYA Kenichi <mew at example.com>
Subject: [mew-dist 22613] newline code of attached euc-jp text
> 受け取ったメイルに添付されたtextのコードがeuc-jpと指定されている場合に、
> "y"でセーブすると改行コードがCR LFになってしまいます。LFになって欲しい
> のですが、どうするのが良いでしょうか?
>
> ## [mew-dist 22031] text/plainでbase64な添付ファイルの保存
> ## の反対のような現象、希望なのですけれども。
高石さんの要望の件ですが、みんな勘違いをして議論が進んでしまったようで
す。
テキストファイルに Base64 を施す場合は、もとの行末コードがなんであれ、
行末を CRLF に直します。
たとえば、UNIX では行末が LF ですが、これを Base64 で符号化すると、
Base64(テキスト+CRLF)CRLF
となります。
UNIX でこのメールを取り込むと、外側の本当の行末は LF になります。
Base64(テキスト+CRLF)LF
高橋さんのメールを引用します。
From: rio-t at example.com
Subject: [mew-dist 22031] text/plainでbase64な添付ファイルの保存
> Content-Type: text/plain; name="hoge.dat"
> Content-Transfer-Encoding: base64
> Content-Disposition: attachment; filename="hoge.dat"
>
> という添付ファイルがあって、この hoge.dat の中身はShift_JIS
> で改行コードが0x0D 0x0Aというテキストファイルでした。
>
> このファイルを y で保存すると、文字コードはそのままでしたが、
> 改行コードが0x0Aになってしまいます。
>
> これを改行コードも変えずに、つまりbase64のデコードだけをした
> そのままの状態で保存する方法はないでしょうか。
#0x0A = LF、0x0D 0x0A = CRLF
というわけで、この要望がオリジナルのファイルの行末を保存するという意味
だとすると、MIME の仕様によりそれはできません。オリジナルの行末がCRLF
のときは、たまたまオリジナルと同じになるだけです。
よって、Base64 を復号化した後に、中から出てきた CRLF を、OS の行末コー
ドに変えるのが自然です。
すなわち、テキストに対し、
* y は一旦 Emacs の内部コードに直し、書くときに元の文字コード
に直す。行末は OS の行末コード。
* C-uy + raw-text-foo では、内部コードに直さない。foo の部分
{unix,dos,mac} で行末コードを指定。
# これならオリジナルの文字コードがなんであれ OK
* C-uy + binary は廃止
という風にするのがいいかと思いますが、どうでしょう?
--かず
Mew-dist メーリングリストの案内