Google
 

音樂分享 - 「君がいるから」by 江口一聲

2008年1月10日 星期四

Email主旨亂碼 =?Big5?(Q|B)?xxxxxxxxxx ?=

原文網址: http://www.javaworld.com.tw/jute/post/view?bid=7&id=4670&sty=3

一、前言:
  您還記不記得,在多年以前,在Microsoft Internet Explorer尚未流行之前,大家收發信件所使用的工具,不是Netscape就是Eudora;那時大家在寫中文信時,並沒有發生什麼困難。直到Internet Explorer出現之後,大家發現,收回來的信件中,總是在主旨欄內看不到正常的中文字,而是看到以=Big5為開頭的一些亂碼,後來慢慢地發現所收的信件中,主旨欄以=Big5為開頭亂碼愈來愈多,逼得到最後,心不甘情不願地將自己原來習慣使用的郵件工具改換為Outlook Express。

二、說明:
  到底為什麼大家非得使用Outlook Express作為收發郵件工具不可呢?得簡單,它預設的信件傳送格式是獨有的,Microsoft老大哥絕對不會遵循大家既有且通用的格式,如此才能慢慢地將大家同化,而改用它的產品,而目前這個目標就快達成了!
  原來Microsoft運用了小技巧,讓我來詳細說明吧!

  在原本Internet世界中,所有的Server幾乎都是Unix的天下,若了解Internet的發展史,應該說是在Unix環境下,才產生Internet的。

  信件在遠端收送時,必須透過一個大家共同遵循的協定,如此大家才能順利地將信件正確的收發。信件在達端收送,可分為兩部分,一是送信,一是收信;送信協定為SMTP(Simple Mail Transhfer Protocol),收信協定則是POP(Post Office Protocol)。

  一般在歐美國家的環境中,所有文字只用到7Bit,所以在整個傳送的協定,都只有7Bit來傳送;但Internet發展到其他各地時,因各地文字之關係,文字有的使用到第8Bit,因此在送信協定(SMTP)中又增加了擴充的功能叫ESMTP(Extented Simple Mail Transfer Protocol),其增加了額外的命令及編碼的功能,讓8Bit的資料能以7Bit編碼的方式來傳送信件。

  在擴充的送信協定(ESMTP)中,提供了MIME(Multiparpose Internet Mail Extersion)的編碼方式,但只是針對信件內容(body)而言;對信件的header(含To:,From:,Message ID:,Subject:,Status:...等)部份,若有用到8Bit文字時,則採用UUencode編碼。

  再來我們介紹一下MIME格式: =?國家碼代號?編碼方式?內容.....?=
國家碼代號=>英文:US-900A,中文(Big5內碼):big5
編碼方式===>Q:Quoted-Printable,B:Base-64
以中文字為例,您看到的MIME編碼後為=?big5?B?...........?=這行文字看起來有沒有很熟悉呢?

  接下來我們看一下由Outlook Express所寄出來的Header部份: Message-ID: <004401bf0562$db9b86c0$18e412a3@manager>
From: =?big5?B?vbKrVKhr?=
To: =?big5?B?sWmnu6n6?=
References: <000201bf0514$ec8e5960$0c0aa8c0@jang-home>
Subject: =?big5?B?UmU6IKZVpuyl66bxLKdAt36o06RGLi4u?=
Date: Thu, 23 Sep 1999 09:27:53 +0800
MIME-Version: 1.0
Content-Type: multipart/alternative;
boundary="----=_NextPart_000_0041_01BF05A5.E99D3500"
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 5.00.2314.1300
X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2314.1300
Status: RO

不論是From:,To:,Subject:,看到的均為=?big5?B?......?=,這是什麼意義呢?原來Outlook Express將整個Header部份,全部以MIME格式編碼。

問題就在這邊,以ESMTP協定來看,Header部份是UUencode,body部份才是MIME,Microsoft這會兒都用MIME編碼!所以大家看到的主旨才會是=?big?B?.......?=,而不是中文字!

  想當初大家都用 Eudora 或 Netscape 收信,都沒什麼問題,主旨使用中文完全沒有問題,遇到中文就用Uuencode,中文完全沒問題;可是Outlook Express一出現,軟微老大他在”主旨”方面的編碼,也給你用Mime格式編碼,大家原本使用的Eudora或Netscape收信,主旨從此就看不到正確的中文字,只看到=Big5.....?=這些亂碼了,被迫得大家非得使用Outlook 或 Outlook Express看信不可。


三、設定方法:
  將 Outlook 信件處理中,信件傳送格式不論是純文字或HTML(預設是HTML格式),MIME格式必須將編碼關掉(不選Quoted Printable或Base 64,要選"無"),且須設定"表頭容許8位元字元";或是乾脆許取選取Uuencode方式;如此便能正常地顯示中文字!
  現在請大家廣為推行,每次設定Outlook時,信件傳送格式若用Mime格式,就不要編碼且須設定"表頭容許8位元字元",或大家乾脆使用Uuencode編碼,讓非Microsoft的信件處理程式,也能順利地看到中文字,不再受軟微老大的壓榨!



更詳細的編碼資訊,可以參考
Decoding Internet Attachments - A Tutorial by Michael Santovec

不錯用的線上解碼 (decode) 網頁:
Base64 http://www.toastedspam.com/decode64
Quoted-printable http://www.toastedspam.com/decodeqp



1 則留言:

布丁布丁吃布丁 提到...

感謝說明
這個問題困擾我很久
現在還在找尋如何將這種編碼轉換成正常中文的方法