us-ascii & quoted-printable で日本語にNo.15309
おじさん さん 03/11/13 09:58
 
us-ascii & quoted-printable で来ているドイツ語のメールが、
日本語にデコードされてしまい、ドイツ語特有の文字(0x80..0xff)の部分が、漢字で
表示されてしまいます。
(送信側の設定が間違っているのかもしれませんが)

関連とも割れる部分を添付いたしますので、どうぞよろしくお願いいたします。

鶴亀V3.06, WinXPHome


MIME-Version: 1.0
Subject: RWE einigt sich mit kommunalen Aktionren der RWE Gas
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
Message-ID: <CHILKAT-MID-fde8397c-1afe-4cb7-a12a-81382af5e839@s071a0100>
X-Eagle-Notice: Sender not 8-bit clean in 'Subject: RWE einigt sich mit komm
unalen Aktion\344ren der RWE Gas'
X-UIDL: 4%U"!2[N"!m\a!!^eA"!
Status: U

________________________________________________________________________=
________=0A=0A=0ARWE einigt sich mit kommunalen Aktion=E4ren der RWE Gas=
=0A=0ADie RWE AG, Essen, und die kommunalen Aktion=E4re der RWE Gas AG, =
(以下省略)

[ ]
RE:15309 us-ascii & quoted-printable でNo.15310
たけのこ さん 03/11/13 10:11
 
一般ユーザのたけのこです。

> us-ascii & quoted-printable で来ているドイツ語のメールが、

us-asciiなのにウムラウトやエスツェットが含まれる方がいかがなものかと思い
ますが、設定メニューの全般的な設定で、エディタ→多国語対応と開き、『英語
(us-ascii)の場合は欧文フォントを使う』にチェックを入れたら大丈夫かと思い
ますよ。

(^^)/”

[ ]
RE:15309 us-ascii & quoted-printable でNo.15315
秀まるお2 さん 03/11/13 10:47
 
 実は最近、この辺の文字コード判定をいじりました。

 メール本文の文字コードが「charset=us-ascii」となっていても、ヘッダ中に
us-ascii以外の文字がある場合は、それを日本語メール扱いするようにしました。

 以前も実は日本語扱いになりつつも、「全般的な設定・エディタ・多国語対
応」での「英語(us-ascii)の場合は欧文用フォントを使う」がONだったら、ちゃ
んとドイツ語で(エディタ画面上は)見えていたのでした。

 とりあえずは、メールをエディタで開いて、「設定・文字コード・欧文」とす
ることで正しく出てくるようになると思います。

 文字コードの自動判定をするか、オプション追加などを検討してみます。

[ ]
RE:15310 us-ascii & quoted-printable でNo.15324
おじさん さん 03/11/13 13:07
 
たけのこさん、コメントありがとうございます。

>ますが、設定メニューの全般的な設定で、エディタ→多国語対応と開き、『英語
>(us-ascii)の場合は欧文フォントを使う』にチェックを入れたら大丈夫かと思い
>ますよ。

これは、すでにそうなっております。

>us-asciiなのにウムラウトやエスツェットが含まれる方がいかがなものかと思い

あれ、us-ascii にはウムラウトは含まれていないのでしたか。
よろしかったらご教示いただきたいのですが、
us-ascii の 0x80..ff はどのような文字があるのですか?
もしかしたら、us-ascii は 0x00..7f のみで、
0x80..ff は含まれていないのでしょうか?

[ ]
RE:15324 us-ascii & quoted-printable でNo.15329
たけのこ さん 03/11/13 14:12
 
一般ユーザのたけのこです。

本題の方のコメントは、秀まるお2さんのオフィシャルコメントであるとして…
…。

> もしかしたら、us-ascii は 0x00..7f のみで、
> 0x80..ff は含まれていないのでしょうか?

正解(0x20未満は……ってことはあるが)です。rfc2278[IANA Charset
Registration Procedures]によれば、

|   [US-ASCII]
|        Coded Character Set -- 7-Bit American Standard Code for
|        Information Interchange, ANSI X3.4-1986.

だそうですので、80h以降は8ビットになってしまうため、US-ASCIIでは未定義
(というか、US-ASCIIではないというか)です。

ちなみに、US-ASCIIの範囲はunicodeの基本ラテンブロックに等しく、80h以降は
ラテン1補助ブロックとなり、ここにはウムラウトやエスツェットがあります。
いわゆるiso-8859シリーズ(欧文文字セット)が使っているところに重なります。

(^^)/”

[ ]
RE:15329 us-ascii & quoted-printable でNo.15331
秀まるお2 さん 03/11/13 15:39
 
 実は僕もよく知らずに、us-asciiとは7Fhまでしか定義されてない7bit文字
コードと解釈してましたが…。

 僕の所に届いたスパムメールで、us-asciiと言いつつ8bit使ってるのがありま
して、それの場合は単純に、Windowsの欧文用文字コードで画面に出してやれば、
それらしき文字が画面に出ました。なので、us-asciiは、表示上はそのまま欧文
として出してやればいいんだと思います。

 次のバージョンで対処したので大丈夫だと思います。

 ちなみに、V3.06の場合だと、charset=us-asciiとなっていても、受信解析の
段階ではそのままにしておきつつ、表示のタイミングで欧文フォントを使って表
示してまして、その場合でも、メール一覧の表示は相変わらず日本語なので化け
てました。

 V3.07β17では、us-asciiでもメールの中身が8bit文字コードなら、それは全
部日本語という扱いにしてしまいました。

 次のV3.07β18では、us-asciiで8bitの場合は、欧文か日本語か自動判定して、
欧文だったら「charset=iso-8859-1 (original=us-ascii)」のようにヘッダを書
き換えるようにしました。メール一覧上の表示も化けません。

 ということで、次のバージョンまで少々お待ちください。

[ ]
RE:15329 us-ascii & quoted-printable でNo.15335
おじさん さん 03/11/13 20:15
 
>正解(0x20未満は……ってことはあるが)です。rfc2278[IANA Charset
>Registration Procedures]によれば、
>
>|   [US-ASCII]
>|        Coded Character Set -- 7-Bit American Standard Code for
>|        Information Interchange, ANSI X3.4-1986.
>
>だそうですので、80h以降は8ビットになってしまうため、US-ASCIIでは未定義

そうだったのですか。ありがとうございました。

[ ]
RE:15315 us-ascii & quoted-printable でNo.15336
おじさん さん 03/11/13 20:20
 
>> とりあえずは、メールをエディタで開いて、「設定・文字コード・欧文」とす
>ることで正しく出てくるようになると思います。

ありがとうございました。とりあえずこれで表示はばっちりです。

> 文字コードの自動判定をするか、オプション追加などを検討してみます。

us-ascii の場合は0x80..ffは本来あってはいけないそうです。なので今回の文字
コード誤判定の原因は、送信側での指定が誤っているからであり、鶴亀側の問題では
ありませんでした。
また、手動で指定しなおす方法も教えていただいたので、あえて対応していただかな
くても構いません。(対応していただければうれしいのですが)

どうもお騒がせして申し訳ありませんでした。

[ ]
RE:15336 us-ascii & quoted-printable でNo.15344
秀まるお2 さん 03/11/14 13:25
 
 次のバージョンにて、欧文か日本語かの自動判定を入れました。

 Date:ヘッダに入っているタイムゾーン情報が日本以外と思わしき場合は必ず
欧文と扱うようにしたので、たぶん大丈夫だと思います。

[ ]
RE:15344 us-ascii & quoted-printable でNo.15358
たるっぱ さん 03/11/15 11:30
 
秀まるお2さん こんにちは。
たるっぱです。

あの、ひょっとして、charsetは無視なんですか?
もし、そうお考えならば、海外に常駐していて日本語のメールを出す人もいる
ので、思い止まって頂きたいです。

> Date:ヘッダに入っているタイムゾーン情報が日本以外と思わしき場合は必ず
>欧文と扱うようにしたので、たぶん大丈夫だと思います。

[ ]
RE:15358 us-ascii & quoted-printable でNo.15363
秀まるお2 さん 03/11/15 21:09
 
 今回の修正は、あくまで、charset=us-asciiと書いてあるにもかかわらず、
0x80〜0xFFの文字コードを含んだメールを送ってきた場合の対処です。

 そもそも、「charset=us-ascii」となっているにも関わらず日本語の(しかも
ShiftJISで)メールを送ってくるケースは、極まれなケースだと思いますが…。

 そういうケースで、しかもそれの送り主が外国だってケースがあるなら、上記
メールで「タイムゾーンが日本以外なら必ず欧文扱いする」って処理だけ抜いて
も、まぁ大したことではありません。精度が少し心配なだけです。

 つまり、

 − ヘッダに「charset=us-ascii」と書いてある。
 − 日本語ShiftJIS文字コードのメールである。
 − メールを送っている所が日本以外である。

 というケースがあるかどうかって話になります。

[ ]
RE:15363 us-ascii & quoted-printable でNo.15377
たるっぱ さん 03/11/16 11:15
 
秀まるお2さん こんにちは。
たるっぱです。

> 今回の修正は、あくまで、charset=us-asciiと書いてあるにもかかわらず、
>0x80〜0xFFの文字コードを含んだメールを送ってきた場合の対処です。

了解です、では私の環境には影響しません。しかし、

1 ヘッダに「charset=us-ascii」と書いてある。
2 日本語ShiftJIS文字コードのメールである。
3 メールを送っている所が日本以外である。

こうすると、1+2は本来考えにくい事態ですが、2+3は特に珍しいことでは
なく、不正なメールであるわけでもありません。
タイムゾーンを判断材料にすると、却って精度を落とす結果にならないかなぁ
と思えてしまいます。

[ ]
RE:15363 us-ascii & quoted-printable でNo.15378
シンヤ さん 03/11/16 16:15
 
>> − ヘッダに「charset=us-ascii」と書いてある。
> − 日本語ShiftJIS文字コードのメールである。
> − メールを送っている所が日本以外である。

米国滞在2に対して日本帰国1の割合で仕事を
しており,メールもその割合で英語と日本語で
書いています.また,滞在場所に因ってタイムゾーンと
WindowsXPの地域オプションもそのたびに変更しています.
したがって,タイムゾーンをコード判定の一部に
用いることは出来れば避けていただきたいと思います.

ただし,このスレッドの中身もよく分からないシロウトなので
どの程度の問題があるのかさえもわかりませんが.

us-asciiで発信したメールに日本語や日本語の名前の
添付ファイルを付けて日本語で返信したりしていますので,
ときどき文字化けして相手先からクレームを受けたりします.
これを避けるために,最近では鶴亀とMozillaを併用していますが..
(メールの整理に鶴亀,発信にMozilla...)

シンヤ

[ ]
RE:15378 us-ascii & quoted-printable でNo.15379
アルビレオ さん 03/11/16 18:47
 
鶴亀ユーザーのアルビレオです。

>米国滞在2に対して日本帰国1の割合で仕事を
>しており,メールもその割合で英語と日本語で
>書いています.また,滞在場所に因ってタイムゾーンと
>WindowsXPの地域オプションもそのたびに変更しています.
>したがって,タイムゾーンをコード判定の一部に
>用いることは出来れば避けていただきたいと思います.

多少誤解があるようですが、charsetさえ正しくセットされていれば何の問題も
ありません。
タイムゾーンを判断材料にするのはcharsetを無条件にus-asciiにセットする
ルール違反のメールについての話です。

たるっぱさんの
>タイムゾーンを判断材料にすると、却って精度を落とす結果にならないかなぁ
というのも多少的外れな気がします。
判断材料のないメールにどう対処するかの話ですから、精度も何もあったもので
はないでしょう。

欧文のメールはフォントさえ用意すればus-ascii用のメーラーがそのまま動作す
ることも多く、日本のもの以上にcharsetがus-asciiのままになっている可能性
は高いと思われます。
それを考えれば、日本語のメールであると推測できる材料がないものは欧文であ
ると仮定するのは現実的な対応だと思います。

日本語のメールだとわかっているのなら、そのメールを別ウィンドウで開いて
[設定]-[文字コード]-[日本語]を選べばいいだけなので、そんなに神経質になる
必要もないでしょう。

>us-asciiで発信したメールに日本語や日本語の名前の
>添付ファイルを付けて日本語で返信したりしていますので,
>ときどき文字化けして相手先からクレームを受けたりします.

問題があるのは送り手なのだから、送り手が正しいメールを送ることが本筋です。
現実には正しくないメールは少なからず存在するので「しかたなく」受け手が対
処するという話題なので。

[ ]
RE:15379 us-ascii & quoted-printable でNo.15381
秀まるお2 さん 03/11/16 20:32
 
 せっかくなので、欧文か日本語ShiftJISかの自動判定をもうちょっと考えてみ
ます。例えば、せめて、日本語をいっぱい書いた場合には日本語と解釈されて、
欧文をいっぱい書いた場合は欧文と扱われるようにします。

 欧文文字なり日本語なりの文字数が足りないと、どうしても自動判定できない
ケースが出てくるので、そういう時にはそれなりの(他の情報を使って)判定せ
ざるを得ないです。あれもだめだこれもやるな、でもちゃんと判定しろだの言わ
れても、八方ふさがりです。

 っと、いちいち状況説明するからいけないんですね、さくっと「適当に判定す
るようにしました」とだけ言っておけばまるく収まった訳ですね。

---------
 とにかく僕自身が最高に適当と思わしき判定をしますので、それでもし不都合
があったらまた連絡ください。

[ ]
RE:15381 us-ascii & quoted-printable でNo.15383
秀まるお2 さん 03/11/16 21:47
 
 っと書いた直後でなんですが、自動判定の精度が高くなるように、いろいろ細
工しました。Date:ヘッダ中のタイムゾーンは見ないことにします。

[ ]
RE:15383 us-ascii & quoted-printable でNo.15499
三木 さん 03/11/26 19:39
 
一点確認させてください。

> っと書いた直後でなんですが、自動判定の精度が高くなるように、いろいろ細
>工しました。Date:ヘッダ中のタイムゾーンは見ないことにします。

添付ファイル付き(ヘッダ内にcharsetなし)で、かつ、タイムゾーンは日本以外
の場合はどのような扱いになるでしょうか?


−− 質問の背景 −−
当方で V3.07beta18 にして以降に受信したメールで意図したとおりに読めないメー
ルがありまして、そのメールの受信ログを見ますと本文中の最初のパートには

Content-Type: text/plain; charset="iso-2022-jp"

とありました。
タイムゾーンは -0600 です。


受信後のメールのヘッダには V3.07beta18(beta19も同様)では

X-Body-Content-Type: text/plain;charset=iso-8859-1 original="iso-2022-jp")

が付加されております。beta17に戻して受信解析のやり直しを行うと

X-Body-Content-Type: text/plain;charset="iso-2022-jp"

が付加され、意図どおりに読めます。

[ ]
RE:15499 us-ascii & quoted-printable でNo.15505
秀まるお2 さん 03/11/26 23:43
 
>添付ファイル付き(ヘッダ内にcharsetなし)で、かつ、タイムゾーンは日本以外
>の場合はどのような扱いになるでしょうか?

 実は今日、V3.07β19をアップロードした所です。β19にて、タイムゾーンに
ついては一切見ないように修正しました。

>X-Body-Content-Type: text/plain;charset=iso-8859-1 original="iso-2022-jp")
>が付加されております。

 こういうことは起こりえないつもりですが、もしかしてβ19で「受信解析のや
り直し」としても相変わらずだめでしたら、また連絡ください。

[ ]
RE:15505 us-ascii & quoted-printable でNo.15508
三木 さん 03/11/27 01:14
 
いつもすばやい対応、ありがとうございます。

>>X-Body-Content-Type: text/plain;charset=iso-8859-1 original="iso-2022-jp")
>>が付加されております。
>
> こういうことは起こりえないつもりですが、もしかしてβ19で「受信解析のや
>り直し」としても相変わらずだめでしたら、また連絡ください。

残念ながらβ19で「受信解析のやり直し」を行ってもだめなのです。
何か必要な情報はありますか?

よろしくお願いします。

[ ]
RE:15508 us-ascii & quoted-printable でNo.15512
秀まるお2 さん 03/11/27 13:52
 
 ソースコードを見直したら、iso-2022-jpなのにiso-8859-1に文字コードが上
書きされる例を見つけました。

 メール本文が日本語でも、例えばSubject:ヘッダに =?iso-8859-1?b?....のよ
うな欧文エンコードが含まれていると、メール全体を欧文と解釈してしまうよう
です。

 これはこれでまずいので修正させていただきます。

[ ]
RE:15512 us-ascii & quoted-printable でNo.15527
三月 さん 03/11/27 21:22
 
> ソースコードを見直したら、iso-2022-jpなのにiso-8859-1に文字コードが上
>書きされる例を見つけました。
>
> メール本文が日本語でも、例えばSubject:ヘッダに =?iso-8859-1?b?....のよ
>うな欧文エンコードが含まれていると、メール全体を欧文と解釈してしまうよう
>です。
>
> これはこれでまずいので修正させていただきます。

ちょっと現象が似てるので書きますが、
Content-Type: text/html; charset="US-ASCII"
で、
Subject: ABCDEF in stock today !
とsubjectはASCIIコードなのですが、メール本文が
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>ABCDEF マガジン</title>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
</head>

といったSHIFT_JISのHTMLのみのメールが
Content-Type: text/html; charset=iso-8859-1 (original="US-ASCII")
となって、本文が文字化けして表示されます。
文字コードを日本語に指定しなおすと直ります。
β19の前は
Content-Type: text/html; charset="US-ASCII"
のままで日本語もそのまま読めてました。


[ ]
RE:15527 us-ascii & quoted-printable でNo.15530
秀まるお2 さん 03/11/27 23:23
 
 charset=us-asciiと書いてあるにもかかわらず8bitのケースですが、現状では、
欧文として不正かどうか、日本語として不正かどうか両方チェックし、両方のチ
ェックを通ってしまった場合には、欧文と解釈するようになってます。

 実際問題として、日本語のメールはほとんど欧文と見てもおかしくないようで、
つまり、charse=us-asciiで8bitのケースはほとんど欧文となってしまうようで
す。

 ということで、この辺の自動判定をさらに改良しました。具体的には、0x80以
上の文字が全体の25%以上なら日本語、さらには、0x8140の全角空白が2文字以
上含まれている場合も日本語と見なすようにしました。

 さらに、今回のようにhtmlメール中のmetaタグで日本語指定されてる場合は、
日本語メールと扱うようにします。

 これでかなりよくなるかなぁと思ったりします。

-----------
 Outlook Expressでちゃんと表示されればなんでもアリってことなんでしょう
ね。

[ ]
RE:15512 us-ascii & quoted-printable でNo.15535
三木 さん 03/11/28 12:15
 
調査&コメントありがとうございます。

> メール本文が日本語でも、例えばSubject:ヘッダに =?iso-8859-1?b?....のよ
>うな欧文エンコードが含まれていると、メール全体を欧文と解釈してしまうよう
>です。

こちらで問題のメールをいろいろいじりながら確認しましたが、
おっしゃるとおりタイムゾーンは無関係でした。失礼いたしました。

どうやらメールサーバ側で追加されたらしきテキスト(ascii文字のみ)が
添付文書のパートの後ろに付いておりまして、
これが charset=us-ascii になっておりました。

メール本文の構成としては

------_=_NextPart_本文パート
Content-Type: text/plain; charset="iso-2022-jp"

------_=_NextPart_添付文書パート
Content-Type: application/vnd.ms-excel;name="XXXX.xls"

------_=_NextPart_サーバ側追加パート(ascii文字のみ)
Content-Type: text/plain;charset=us-ascii
Content-Disposition: inline

という感じでした。

サーバ側追加パートを charset="iso-2022-jp" にするか、
あるいは Content-Disposition:attachment; にしてやれば
意図したとおりに読めることが確認できました。

本来の本文は charset="iso-2022-jp" となっておりますので
欧文扱いにしないで欲しいです。ご検討いただけませんでしょうか?

よろしくお願いします。

[ ]
RE:15535 us-ascii & quoted-printable でNo.15538
秀まるお2 さん 03/11/28 15:22
 
 マルチパートになっている各パートが複数言語混在なのは、たぶん関係ないと
思います。

 それよりも、ヘッダ部分に「=?iso-8859-1?b?.....?=」みたいな欧文のエン
コード部分があるんじゃないかと思います。

 それがあると、メール全体の文字コードが欧文と解釈されしまってました。

 β20にて一応改良しましたが、残念ながら、charset=iso-2022-jpそのままに
はなりません。iso-2022-jpにしてしまうと、欧文が化けてしまうからです。欧
文と日本語の両方を化けないようにするために、

     charset=utf-8 (original=iso-2022-jp)

 と書き換えられるはずです。

 その辺、β20にて「受信解析のやり直し」をしてみて確認してほしいです。

 もしそれでもダメでしたら、出来れば受信ログの、せめてヘッダ部分だけでも
(一部伏せ字にするなどして)送って欲しいです。

 送り先は、 maruo@mitene.or.jp です。

[ ]
RE:15538 us-ascii & quoted-printable でNo.15539
三木 さん 03/11/28 18:17
 
いつもすばやい対応、ありがとうございます。

> それよりも、ヘッダ部分に「=?iso-8859-1?b?.....?=」みたいな欧文のエン
>コード部分があるんじゃないかと思います。

こちらはありませんでした。

> その辺、β20にて「受信解析のやり直し」をしてみて確認してほしいです。

やってみましたが、残念ながら改善されませんでした。

> もしそれでもダメでしたら、出来れば受信ログの、せめてヘッダ部分だけでも
>(一部伏せ字にするなどして)送って欲しいです。

自分宛にメールを送ってそれを元に再現するメールを作りましたので
そちらを丸ごと転送します。

よろしくお願いします。

[ ]
RE:15530 us-ascii & quoted-printable でNo.15540
三月 さん 03/11/28 22:14
 
> charset=us-asciiと書いてあるにもかかわらず8bitのケースですが、現状では、
>欧文として不正かどうか、日本語として不正かどうか両方チェックし、両方のチ
>ェックを通ってしまった場合には、欧文と解釈するようになってます。
>
> 実際問題として、日本語のメールはほとんど欧文と見てもおかしくないようで、
>つまり、charse=us-asciiで8bitのケースはほとんど欧文となってしまうようで
>す。
>
> ということで、この辺の自動判定をさらに改良しました。具体的には、0x80以
>上の文字が全体の25%以上なら日本語、さらには、0x8140の全角空白が2文字以
>上含まれている場合も日本語と見なすようにしました。
>
> さらに、今回のようにhtmlメール中のmetaタグで日本語指定されてる場合は、
>日本語メールと扱うようにします。
>
β20で受信解析のやり直しをしたらちゃんと読めるようになりました。

[ ]
RE:15539 us-ascii & quoted-printable でNo.15542
三木 さん 03/11/29 02:08
 
>自分宛にメールを送ってそれを元に再現するメールを作りましたので
>そちらを丸ごと転送します。

β21で当方の意図どおりの動作となることを確認しました。

どうもありがとうございました。

[ ]