Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
MIMEヘッダエンコーディングは複雑すぎてつらい / MIME header encoding...
Search
とみたまさひろ
June 23, 2021
Technology
1.6k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
MIMEヘッダエンコーディングは複雑すぎてつらい / MIME header encoding is hard
とみたまさひろ
June 23, 2021
More Decks by とみたまさひろ
See All by とみたまさひろ
MySQLとPostgreSQLのコレーション / Collation of MySQL and PostgreSQL
tmtms
1
1.8k
文字列の並び順 / Unicode Collation
tmtms
4
1.1k
夢の印税生活 / Life on Royalties
tmtms
0
610
文字列の並び順 / String Collation
tmtms
1
220
日本MySQLユーザ会ができるまで / making MyNA
tmtms
1
1.1k
Ruby on Browser - RubyWorld Conference 2024
tmtms
1
1.6k
Ruby on Browser
tmtms
1
2.3k
私のRSpecの書き方 / How I write RSpec
tmtms
5
2.3k
ショートカットと端末 / shortcut & terminal
tmtms
2
1.1k
Other Decks in Technology
See All in Technology
AI時代のコスト管理を考えよう〜明日から使える実践AWSノウハウ~
yoshimi0227
0
730
Bucharest Tech Week 2026 - Reinventing testing practices in the AI era
edeandrea
PRO
1
170
SONiCの統計情報を取得したい
sonic
0
270
手塩にかけりゃいいってもんじゃない
ming_ayami
0
620
ACE-Step-1.5で見る 音楽生成AIのしくみと“破綻だけ直す”Retake機能の開発【zennfes spring 2026 登壇資料】
personabb
1
550
20260619 私の日常業務での生成 AI 活用
masaruogura
1
240
When Platform Engineering Meets GenAI
sucitw
0
150
白金鉱業Meetup_Vol.24_「AIエージェントは分けるほど良い」は本当か? / Is it true that “the more you divide AI agents, the better”?
brainpadpr
1
430
【セミナー資料】Claude Code をセキュアに使うための考え方と設定の勘どころ / Claude Code Webinar 20260616
masahirokawahara
2
440
秘密度ラベル初心者が第1歩でつまづかないための「設計・運用」ポイント
seafay
PRO
1
420
AIAU_UMEMOGU_ninomiya_slide
ninomiya_ii
0
250
自分が詳しくない領域でAIを使う #プロヒス2026
konifar
20
7k
Featured
See All Featured
Thoughts on Productivity
jonyablonski
76
5.2k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
360
Believing is Seeing
oripsolob
1
150
Designing Powerful Visuals for Engaging Learning
tmiket
1
420
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
560
Navigating Team Friction
lara
192
16k
We Are The Robots
honzajavorek
0
250
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
1.1k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.7k
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.7k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
340
Transcript
MIMEヘッダエンコーディングは MIMEヘッダエンコーディングは 複雑すぎてつらい 複雑すぎてつらい 2021-06-22 とみたまさひろ 1
別にしらなくてもいい 役に立つか立たないかわからない 技術について語るコーナー 2
MIMEヘッダエンコーディング MIMEヘッダエンコーディング メールのヘッダでよく見る =?ISO-2022-JP?B?GyRCRnxLXDhsGyhC?= みたいなやつ 3
RFC 2047 RFC 2047 Message Header Extensions for Non-ASCII Text
メールのヘッダは ASCII のみ ASCII以外の文字列をヘッダに書けるようにするために 作られた規格 https://tools.ietf.org/html/rfc2047 4
Bエンコーディング: Qエンコーディング: 「日本語ABC」を変換すると: =?[文字コード]?B?[Base64化されたデータ]?= =?[文字コード]?Q?[そのまま書けない文字を=XXに変換したデータ]?= =?ISO-2022-JP?B?GyRCRnxLXDhsGyhCQUJD?= =?ISO-2022-JP?Q?=1B$BF|K\8l=1B(BABC?= =?UTF-8?B?5pel5pys6KqeQUJD?= =?UTF-8?Q?=E6=97=A5=E6=9C=AC=E8=AA=9EABC?= 5
エンコードのつらみ エンコードのつらみ 6
Bエンコーディングは基本的には文字列をBase64化して 前後に文字列をつけるだけ 日本語 → 5pel5pys6Kqe → =?UTF-8?B?5pel5pys6Kqe?= つらくない 7
↓ 長い… Subject: MIMEヘッダエンコーディングは複雑すぎてつらい Subject: =?UTF-8?B?TUlNReODmOODg+ODgOOCqOODs+OCs+ODvOODh+OCo+ODs+OCsOOBr+ikh+mbkeOBmeOBjuOBpuOBpOOCieOBhA==?= 8
メールのヘッダだから折り返しちゃえ! ダメ 折り返せるのは空白文字の箇所だけ Subject: =?UTF-8?B?TUlNReODmOODg+ODgOOCqOODs+OCs+ODvOODh+OCo+ODs+OCsOOBr+ik h+mbkeOBmeOBjuOBpuOBpOOCieOBhA==?= 9
複数のエンコーディング文字列に分割する エンコーディング文字列間の空白は取り除かれる仕様 だからよさそう でも実はこれでもダメ Subject: =?UTF-8?B?TUlNReODmOODg+ODgOOCqOODs+OCs+ODvOODh+OCo+ODs+OCsOOBr+ik?= =?UTF-8?B?h+mbkeOBmeOBjuOBpuOBpOOCieOBhA==?= 10
文字を分割しちゃダメ 「複」(E8 A4 87) が分割されてしまっている =?UTF-8?B?TUlNReODmOODg+ODgOOCqOODs+OCs+ODvOODh+OCo+ODs+OCsOOBr+ik?= → MIMEヘッダエンコーディングは<E8><A4> =?UTF-8?B?h+mbkeOBmeOBjuOBpuOBpOOCieOBhA==?= →
<87>雑すぎてつらい 11
文字単位で処理しないといけない =?UTF-8?B?TUlNReODmOODg+ODgOOCqOODs+OCs+ODvOODh+OCo+ODs+OCsOOBr+==?= → MIMEヘッダエンコーディングは =?UTF-8?B?6KSH6ZuR44GZ44GO44Gm44Gk44KJ44GE?= → 複雑すぎてつらい 12
さらに ISO-2022-JP のような状態を持つ文字コードの場合は ASCII で終了しないといけない <ESC>$B : JIS X 0208
<ESC>(B : US-ASCII 日本語ABCあいう → <ESC>$BF|K\8l<ESC>(BABC<ESC>$B$"$$$&<ESC>(B 13
これは OK <ESC>$BF|K\8l<ESC>(BABC⏎ 日本語ABC <ESC>$B$"$$$&<ESC>(B あいう 14
これはNG <ESC>$BF|K\8l<ESC>(BABC<ESC>$B$"⏎ 日本語ABCあ $$$&<ESC>(B いう 15
やるならエンコーディング文字列の最後にASCIIに戻す <ESC>$BF|K\8l<ESC>(BABC<ESC>$B$"<ESC>(B⏎ 日本語ABCあ <ESC>$B$$$&<ESC>(B いう 16
デコードのつらみ デコードのつらみ 17
文字が分割されている =?UTF-8?B?44GC44GE44GG44GI44E=?=⏎ あいうえ<E3><81> =?UTF-8?B?iuOBi+OBjeOBj+OBkeOBkw==?= <8A>かきくけこ ↓ あいうえ???かきくけこ 18
エンコーディング文字列がつながってる 本当はデコードしちゃダメ =?UTF-8?B?44GC44GE44GG44GI44GK?==?UTF-8?B?44GL44GN44GP44GR44GT?= 19
「"」で括られている 添付ファイル名とかでよく見る 本当はデコードしちゃダメ "=?UTF-8?B?44GC44GE44GG44GI44GK?=" 20
ISO-2022-JP と書かれてるのに ISO-2022-JP に無い文字が含まれている 「ア」「①」「Ⅲ」「㍻」「髙」など 本当はダメなんだけど普通に使われてる ISO-2022-JP じゃなくて CP50221 として扱う
21
つらい 😇 つらい 😇 22