メール添付の日本語ファイル名のデコード – プログラミング – Home

メール添付の日本語ファイル名のデコード
 
通知
すべてクリア

[解決済] メール添付の日本語ファイル名のデコード


money
 money
(@money)
ゲスト
結合: 18年前
投稿: 6
Topic starter  

WinXP VS2005 MFC

下のページを見ながらメーラーを作ってるのですが、
http://www.kumei.ne.jp/c_lang/

POPから取り出した日本語の添付ファイル名が
デコードできずに困っています。

ファイル名は
%E3%82%A6%E3%82%A3%E3%82%AD

のような形式です。

よろしくお願いします。


引用未解決
トピックタグ
YuO
 YuO
(@YuO)
ゲスト
結合: 22年前
投稿: 320
 

ん?
ファイル名がそのようになることは無いはずですが……。

まともなメーラーであれば,RFC 2231に沿うので,最初に文字エンコーディングが書かれ
ているはずです。
RFC違反であるMIME Bエンコードであっても,最初に文字エンコーディングが書かれてい
ます。
あとは,エンコードがRFC 2231かMIMEかによって振り分けてやればよいです。
提示のものは,おそらく,
Content-Disposition: attachment;
filename*=utf-8'ja'%E3%82%A6%E3%82%A3%E3%82%AD
のようになっていたはずで,これはファイル名のエンコーディングがUTF-8であることを
示し,それでデコードするとファイル名が「ウィキ」のファイルになります。
# RFC 2231にはerrataが出ています。サンプルに間違いがあるので注意してください。


返信引用
money
 money
(@money)
ゲスト
結合: 18年前
投稿: 6
Topic starter  

>YuOさん

返信ありがとうござます。

文字のエンコーディングは確かに乗っていました。
ISO-2022-JPでした。

ところで、

%が入っている文字列はどういう風に
デコードするのでしょうか?

一応調べたのですが、具体的にどのようにされて、
「ウィキ」迄たどり対なのですか?

難しい質問かもしれませんが、
よろしくお願いします。


返信引用
ぬふや
 ぬふや
(@ぬふや)
ゲスト
結合: 18年前
投稿: 34
 

%の次の2文字を16進数で読み込めば良い。
このバイト列がISO-2022-JP等でエンコードされた文字列なので、これをさらに
Unicodeなどに変換する必要がある。


返信引用
YuO
 YuO
(@YuO)
ゲスト
結合: 22年前
投稿: 320
 

> 文字のエンコーディングは確かに乗っていました。
> ISO-2022-JPでした。

本当にISO-2022-JPですか?
どうみても,ISO-2022-JPとは思えませんが。

Content-DispositionフィールドにISO-2022-JPだと書かれていて,
あの文字列があるならば,それは単に無効な文字列です。

> %が入っている文字列はどういう風に
> デコードするのでしょうか?
> 一応調べたのですが、具体的にどのようにされて、
> 「ウィキ」迄たどり対なのですか?

単純に%の直後の2文字が16進数だから,そのままデコードするだけです。
文字コードの並びからUTF-8だろうと予想してデコードしました。

一応調べたとありますが,ちゃんとRFCを読みましたか?
せめて回答中に挙げたRFC 2231は読んでください。
本当であれば,MIME,つまりRFC 2045~2049も読まないといけないですが……。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

どのレベルまで実装しようとしているかによりますけれど、
本当に実用に使えるレベルのメーラーを作成するつもりなら
YuOさんが言われているようにRFCをきちんと読んで
メールのやり取りやメールそのものに関する知識を集めないと
無理ですよ。
自分の勉強用であって実用レベルを目指さないなら必須とは言いませんけれど、
それでも自分がやりたい事に関係するRFCは読みこなさないとまともに動くものは
難しいと思います。
また、RFCにきちんとあわせて作っていても勝手な事をしているメーラーと言うのは
あるのでそういったメーラーからの物も救おうとするとかなりの手間になります。
世の中でメーラーが売り物になっていると言う事からして実用に耐えるものを作るのが
以下に大変なのかがわかると思います。

チャレンジする姿勢はすばらしいと思いますので、気長に調べながら頑張ってみてはと思
います。


返信引用
money
 money
(@money)
ゲスト
結合: 18年前
投稿: 6
Topic starter  

>ふぬやさん

ありがとうございます!
おかげさまで、今回については出来ました。

以下手順
%でSplitする。
各要素を
char c = (char)strtol(split,***,16);
で強制変換
デコード

>YuOさん
例で載せた文字列はあくまで「%で区切られた文字列」
を表現したくて、WikiのURLからコピーしたものです。

勘違いさせてしまい申し訳ありません。

RFCについては、英語で断念し
紹介サイトを読んだだけでした。すいません。

必要なトコだけというのではやはり穴が開くということでしょうか。
ありがとうございました。

>PATIOさん

商品ではないので「完璧」は目指せませんが、
今回のことで、文字コードの違いからくる問題に興味がわきました。

とりあえずRFC準拠、OE、OL、ベッキーぐらいの
有名どころは大丈夫なぐらいまでこつこつ進めて生きたいと思います。

一気は無理ですがまたわからないところがあったら質問させてください。
ありがとうございました。


返信引用
money
 money
(@money)
ゲスト
結合: 18年前
投稿: 6
Topic starter  

済み


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました