スキップしてメイン コンテンツに移動

投稿

3月, 2026の投稿を表示しています

そもそも添付ファイル名の規約ってRFCでどうなってるの?

Outlookから送ったメールの添付ファイル名が、iPhoneで「 =?utf-8?Q?...?= 」と無残に文字化けしてしまう現象。その元凶を紐解くと、1990年代から続く 「RFC規格のねじれ」 と、Microsoftによる 「独自の割り切り」 という深い闇に突き当たります。 前回の検証記事( Outlookのエンコード選択 / iPhoneでの5nの法則 )を補完する形で、そもそもRFC(インターネット標準)では添付ファイル名がどう定義されているのかを解説します。 1. 添付ファイル名を定義する「RFC 2183」 メールにファイルを添付する際、ヘッダーには Content-Disposition というフィールドが使われます。これを定義しているのが RFC 2183 です。 Content-Disposition: attachment; filename="example.txt" ここで重要なのは、このRFC 2183が制定された1997年当時、 filename パラメータには 「7bitのASCII文字(英数字)」しか想定されていなかった という点です。日本語などのマルチバイト文字をどう扱うかは、この規格内には書かれていません。 2. 日本語対応の救世主「RFC 2231」 そこで、ファイル名に日本語を使ったり、長すぎる名前を分割したりするために作られたのが RFC 2231 です。これが現在、世界標準の「正しい作法」です。 特徴: filename*=utf-8''%... という形式を使い、文字コードを明示する。 利点: ヘッダーの文法を壊さずに、安全に非ASCII文字を伝送できる。 3. なぜ問題が起きるのか? ― Outlookの「不採用」 ここが最大のポイントですが、 デスクトップ版のOutlook(2019等を含む)は、この「正しい作法(RFC 2231)」を頑なに採用していません。 代わりにOutlookが何をしているかというと、本来はメールの件名(Subject)などに使うための規格である RFC 2047(Encod...

今日こそ終止符!iPhoneの標準メーラーで添付ファイル名が文字化けする原因とその対応

OutlookからiPhoneにメールを送ると、添付ファイル名が =?UTF-8?Q?...?= と化ける問題。長年「相性の問題」で片付けられてきたこの怪奇現象に、休日の半日を潰してトドメを刺してきました。 1. 境界線の発見:「5Nの法則」 実験の結果、ファイル名に日本語(非ASCII)が混じっている場合、ある一定の条件でエンコード方式が切り替わることが分かりました。それが以下の 「5Nの法則」 です。 5Nの法則: 非ASCII文字を N 個含むとき、ASCII文字(英数字)が 5N 個に達した瞬間にiPhoneで文字化けが発生する。 非ASCII数 (N) Base64限界 (ASCII) 文字化け発動 (ASCII) 1文字 (あ) 4文字 5文字以上 2文字 (あい) 9文字 10文字以上 3文字 (あいう) 14文字 15文字以上 この法則はUTF-8だけでなく、欧州圏の iso-8859-1 (Latin-1) でも全く同様に発動しました。 2. なぜ「5」なのか?数学的背景 Outlookはメールヘッダーを1バイトでも節約しようと、以下の2つのエンコードを動的に使い分けています。 MIME-B (Base64): 全体を1.33倍にする。 MIME-Q (Quoted-...

Outlookは添付ファイル名をMIME-BエンコードするときとMIME-Qエンコードするときがある ~ OutlookでUTF-8を使ったら、iPhoneの標準メーラーで添付ファイル名が文字化けした話 ~

Outlook で Unicode (UTF-8) を使うときのお話として聞いてね。 あ、良かったらこちらもどうぞ 【Outlookで自動改行させないための設定 ~もういい加減 UTF-8 / base64 でよくね?~】 https://chibitcpu.blogspot.com/2025/12/outlook.html RFCも絡めてまとめてみたので、サクッと対応したい人はこちら 【今日こそ終止符!iPhoneの標準メーラーで添付ファイル名が文字化けする原因とその対策】 https://chibitcpu.blogspot.com/2026/03/outlook-iphone-filename-encoding-5n.html さて・・・  iPhoneの標準メーラーで添付ファイル名が文字化けした。(正確には「復号してくれなかった」) =?utf-8?Q?.... 今までと同じ方法でファイルを添付して送っていたのに、なぜか表示されない。 そこで、表示できるときとできないときの違いを知りたくて、メールのソースを表示してみた。 すると ■ 表示できる方 filename="=?utf-8?B?..." ■ 表示できない方 filename="=?utf-8?Q?..." できる方は 「B」エンコーディング (Base64)、できない方は 「Q」エンコーディング (Quoted-Printable っぽいやつ) だった。 おいおい、なんで違うんだよって思って、Copilotに聞いてみた。 Q. Outlook2019を使っています。ファイル名に日本語を含む添付ファイルを送るとき、ファイル名が「B」エンコーディングされるときと、「Q」エンコーディングされるときがあります。「B」エンコーディングで固定したいのですが、どうすればいいですか? A. 結論から言うと、Outlook 2019 では添付ファイル名の符号化方式をユーザー側で固定する設定は存在しません。これは仕様であり、Outlook が内部ロジックに基づいて自動的に選択しているためです。ただし、どのような条件で 「B」/「Q」が選ばれるのかは不明です。ただ 、「B」エンコーディング に“寄せる”ために現実的にできる対策があります。 まじかよ。仕様かよ。 Base64に「寄せ...