[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 メーリングリストの案内