掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
VB2010 メール送信 添付ファイル名文字化け (ID:147722)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
お気づきとは思いますが、添付ファイル名の扱いはいろいろと難しい所で、 ・本来は RFC2231 で書かれるべき。(ただし、非対応のメーラーも未だ存在する) ・MIME(Bエンコード)なら読めるメーラーもある。(ただしそれは RFC 違反な実装である) ・稀に、UUENCODE や BinHex が採用されているメーラーさえ存在する。 という状況なんですよね。ゆえに PC だと受信できて、携帯だと化けるなんてことも。 > Private Function EncordB(ByVal strTarget As String) As String EncordB ではなく、EncodeB あるいは BEncode では無いかな…? > strEncSubject = "=?ISO-2022-JP?B?" & Convert.ToBase64String(arrbJisSubject) & "?=" YuO さんが紹介された URL http://www.emaillab.org/essay/japanese-filename.html を見ると、 RFC 2231 で "ほごほげ.jpeg" を送出するために、以下の例示がありますね。 Content-Disposition: attachment; filename*=iso-2022-jp'ja'%1B%24B%24%5B%244%24%5B%242%1B%28B.jpeg 一方、まさおさんが書かれた > strEncSubject = "=?ISO-2022-JP?B?" & Convert.ToBase64String(arrbJisSubject) & "?=" の結果は『strEncSubject = "ほごほげ.jpeg"』となります。 試しに、HttpUtility.UrlEncode メソッドで変換してみました。 これだと「(」と「)」は置き換わらないので、追加変換が必要にはなりますが、 『s = System.Web.HttpUtility.UrlEncode("ほごほげ.jpeg", System.Text.Encoding.GetEncoding(50220)).Replace("(", "%28").Replace(")", "%29")』 を実行することで、『s = "%1b%24B%24%5b%244%24%5b%242%1b%28B.jpeg"』を得ることができます。 …ただし残念ながら、RFC2231 にて定義されているパーセントエンコーディング部分は ext-octet := "%" 2(DIGIT / "A" / "B" / "C" / "D" / "E" / "F") であって、 ext-octet := "%" 2(DIGIT / "A" / "B" / "C" / "D" / "E" / "F" / "a" / "b" / "c" / "d" / "e" / "f" ) ではないので、このまま使う事はできません。 かといって単純に .ToUpperInvariant() してしまうと、 "%1B%24B%24%5B%244%24%5B%242%1B%28B.jpeg" ではなく "%1B%24B%24%5B%244%24%5B%242%1B%28B.JPEG" になってしまうので、 自前で変換するか、"%??" 単位で大文字化する処理のいずれかが必要そうです。 なお、この変換作業によって送信できるようになるかどうかは分かりません。 (手元にメール送信可能な環境が無いため、検証できません…) > 理解は致しましたが和文名ファイルをなんとか添付したいと考えています。 相手のメーラーで RFC2231 が使えるかどうかが事前に分からないような状況では、 残念ながら『日本語を使わない』という後ろ向きな選択をした方が無難なのですが、 どうしても日本語のファイル名を送付する必要がある場合には、それらを 英数字名の LZH / ZIP / CAB ファイル等に固めて添付するという手もあります。 とはいえ、実は ZIP にも文字コード問題があるのですけれどね…。 https://connect.microsoft.com/VisualStudio/feedback/details/711235/system-io-ziparchive-zipped-only-utf-8-encoding # 本来は、ZIP内部のファイル名には CP437 しか使えない仕様のはずだが、実際には各国で # まちまちな文字コードにて利用されている(国内では Shift_JIS が使われる事が多い)ため、 # いざ解凍しようとすると、文字コード判定に失敗して文字化けを起こしてしまうという罠。 # (PKWARE 6.3.0 以降では UTF-8 も使えるが、WinXP の ZIP フォルダ等は UTF-8 未対応)
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.