中文編碼解析工具 Ver 1.3

上回發表中文編碼解析工具 Ver 1.2後,網友Esther建議再加上GBK-Q, GBK-B的編碼解析。

說實在話,我沒聽過這兩個名詞,但Google了一下馬上晃然大悟,原來指的是我們常在Mail Subject或收件寄件人資料上看見的那種編碼。格式像這樣:
=?x-gbk?q?=B5=C4=B7=AD=D2=EB?=

怎樣,一Show出格式,大家都很有感覺了吧? 這Mail Server為了克服Mail Header只支援7bit字元所想出來用在底層的編碼法,卻常因為Mail Server、Mail Client間的默契不足沒被順利解碼還原露了餡,赤裸裸地在郵件軟體上顯示出來。以前挺常遇到的,但這些年來,郵件伺服器及軟體漸漸聰明了,就不太常再出現。有網友提出表示這還是某些人的痛,而我用Google找了一下,也還看見不少,索性在中文編碼解析工具加入這項新功能(目前只支援Big5與簡體中文,應該夠用了),推出Ver 1.3版,有需要的朋友可以下載回去玩玩。

程式下載

程式下載(Ver 1.32)

歡迎推文分享:
Published 16 September 2007 09:14 AM 由 Jeffrey
Filed under: ,
Views: 62,442



意見

# sida said on 14 November, 2007 01:20 AM

有bug喔~

轉換後

用滑鼠隨便去點下面的UrlEnc

有時候會忽然亂掉 變成其他字@_@

# Jeffrey said on 14 November, 2007 06:57 AM

To sida, 試了好一會兒,沒試出你講的問題,看可不可以給我重現問題的操作步驟或是抓一下畫面,我再好好研究一下,謝謝囉。

PS: 底下的UrlEnc可以輸入編碼後的文字,移開焦點後會自動轉換回中文,不知是否與這個功能有關?

# sida said on 28 November, 2007 09:28 PM

麻煩請輸入"俊" 這個中文字

轉碼後

把滑鼠移到UrlEnd點一下

然後在把滑鼠點回去中文內容那個地方

"俊"這個字就變了

# Jeffrey said on 28 November, 2007 09:54 PM

To sida, 知道你說的問題了。UrlEncode的Big5版會有英文字母出現,而原來的程式會做ToLower(),某些中文字就因為組成字元大寫變小寫而變了調,Yes! 這是個Bug!

謝謝你的通報,我已修正出1.31版也更新了下載連結,請您再試試。

# EricHuang said on 11 December, 2007 01:22 AM

很有用的工具,不知道可否分享一下如何將NCR轉回難字的程式片段呢..我的mail是erichuang0901@gmail.com

感謝

# ego said on 03 March, 2008 12:20 AM

能否請您寄給我[信件標題解碼]的VBS程式碼

我的mail:ego@tayih-ind.com.tw

謝謝!!!

# Jeffrey said on 03 March, 2008 05:07 PM

To ego,

   信件標題解碼的部分我是用.NET的Regex, Encoding物件做出來的,VBScript在這方面沒有直接的對應物件,所以我的寫法沒法直接翻成VBScript。你可以考量看看要不要將.NET DLL包成COM+給VBScript呼叫解決問題,不過多了要註冊元件的手續就是了。

# JoySu said on 26 April, 2008 09:34 PM

dear sir

因為某種須要,我必須將一段中文字以程式碼轉成如您程 式內urlEnc(Big5)的編碼,然後以querystring的方式傳出,請問轉碼的部份我該如何做呢,可否請您回覆至我的信箱(email: smc@savebooks.net)

這對我非常重要,先感謝您的幫忙

# Jeffrey said on 27 April, 2008 10:36 AM

To JoySu,

HttpUtility.UrlEncode有一個Overloading可以傳入第二個參數決定語系。msdn2.microsoft.com/.../h10z5byc(VS.80).aspx

HttpUtility.UrlEncode("中文", System.Text.Encoding.GetEncoding("big5"));

# CHE said on 09 February, 2009 12:00 AM

請問下載EncAnalyzer13.zip解開後,只有一個EncAnalyzer13沒有副檔名的檔案。

要如何使用呢?

# Jeffrey said on 09 February, 2009 03:15 AM

to CHE, 怪異的很,同一個檔案從備用站台下載是好的: blog2.darkthread.net/.../entry1081.aspx,大家先去備站取檔,我有時間再來查一下撞鬼的原因。

# 無所不在 said on 11 January, 2010 08:48 PM

請問一下有關於unicode編碼的問題。

例如:𨀀

這個字的unicode碼是 0x28000

從你的程式查到的是 60 D8 00 DC

也就是說應該是 0xD860DC00

我查了一下編碼規則(zh.wikipedia.org/.../UTF-16)一這個規則解回來,則是 0x18000

你是否知道如何反解回去?

# Jeffrey said on 12 January, 2010 10:51 AM

to 無所不在, 計算Surrogate Pair時,要先減去0x10000。

1.Take the Unicode value of the character and subtract 0x10000 from it. 參考來源:

zsigri.tripod.com/.../surrog.html

我想這可以解釋0x28000與0x18000間的差異。

# 汁豬人 said on 21 January, 2010 02:19 AM

現在幾乎都 UTF-8 當道,  "目前只支援Big5與簡體中文,應該夠用了" , 不夠用了, 因為正想要解 utf-8, 沒想到它不能用 @ @

# Jeffrey said on 21 January, 2010 02:48 AM

to 汁豬人,呵,本想說這種編碼已經絕跡了(我以為只支援7bit的Mail Server應該都死光了才對),沒想到還是有需求。我想要多加utf-8支援不是難事,你能提供一段utf-8編碼範例讓我驗證解碼結果嗎?

# 阿信 said on 16 March, 2010 08:26 PM

您好,我嘗試使用URLENC(Unicode) 轉回正常的文字時,發現一個小BUG,當我的地址是"台北市新生南路一段12號"時可以轉成"%u53f0%u5317%u5e02%u65b0%u751f%u5357%u8def%u4e00%u6bb512%u865f"但是這一段卻無法反解析成中文會報錯,我研究一下結果發現是跟數字有關,請問這要如何解呢?

# Jeffrey said on 17 March, 2010 12:07 AM

to 阿信, 謝謝您的通報,是Bug!! 我修改了一個Ver 1.32版,請再試試問題是否已解決。blog2.darkthread.net/.../download.aspx

# Eric said on 15 June, 2010 06:10 PM

Dear Jeffrey

上方的連結 程式下載(Ver 1.32)

多了%20所以無法下載

以下方的意見 我修改了一個Ver 1.32版

下載回來後解開,只有一個EncAnalyzer132沒有副檔名的檔案。

# Jeffrey said on 16 June, 2010 10:59 PM

to Eric, 請改用非IE下載看看。(原因: http://bit.ly/9UW16d)

# 灭蟑螂 said on 10 July, 2010 10:06 PM

这个很有用,我下载了,多谢

# 小豬 said on 06 December, 2010 06:16 AM

真謝謝你~我下載了~很有用呢!

# 阿信 said on 25 July, 2012 06:10 AM

您好想請問您一個問題,我研究了好久查不出原因,可否請你教我一下,謝謝

我們用

HttpUtility.UrlEncode('萊爾富北縣興南店貳', Encoding.GetEncoding(950))會產出

%b5%dc%ba%b8%b4I%a5_%bf%a4%bf%b3%abn%a9%b1%b6L

但是我接收到人家的QueryString則是

%B5%DC%BA%B8%B4%49%A5%5F%BF%A4%BF%B3%AB%6E%A9%B1%B6%4C

所以無法HttpUtility.UrlDecode正確反解回中文

不知道要怎麼解決

# Jeffrey said on 25 July, 2012 05:30 PM

to 阿信, UrlDecode時是否有指定Encoding? 經測試

HttpUtility.UrlDecode("%B5%DC%BA%B8%B4%49%A5%5F%BF%A4%BF%B3%AB%6E%A9%B1%B6%4C", Encoding.GetEncoding(950)); 可解出"萊爾富北縣興南店貳"。

# 阿信 said on 26 July, 2012 02:22 AM

謝謝您,我太執著在Encoding後長得不一樣,以為是這個部分造成的問題。

卻忽略了使用Request("SO")時會被先用UTF-8 DECODE

改用Request.URL.Query自己抓取在解碼就OK了,謝謝您

# 卡卡西 said on 28 August, 2012 10:09 PM

您好

我想用 \u4e16;\u754c\u60a8\u597d 作解碼

放在 url unicode ,他會出顯警告訊息「 \u4e16;\u754c\u60a8\u597d]不是有效的UrlEncode編碼! 」

可以在多一種解碼模式嗎?

# Jeffrey said on 29 August, 2012 06:42 AM

to 卡卡西,你提供的範例要轉成%u4e16%u754c%u60a8%u597d才符合UrlEncode的規範,\unnnn的寫法應是C#中的Unicode字元表示法[ msdn.microsoft.com/.../aa664669(v=vs.71).aspx ],謝謝回饋,未來會考慮加入。

現階段的替代做法是在C#中用類似Console.WriteLine("\u4e16;\u754c\u60a8\u597d");的做法即可轉換。(或是在LinqPad中直接寫"\u4e16;\u754c\u60a8\u597d"就可立即揭曉, http://www.linqpad.net/)

# Test said on 14 November, 2012 02:12 PM

可以請您加上「中文網址轉換成UTF-8編碼」的功能嗎?因為下面的程式是要上網才能用的,感謝!

請參考:werdna1222coldcodes.blogspot.tw/.../online-urlencoderutf-8.html

# paggyyen said on 19 January, 2013 04:05 PM

them

# Leo said on 11 April, 2013 06:08 AM

Dear Sir

因需要分析信件標題

能否請您寄給我[信件標題解碼]的程式碼參考

mail:leolai@n**馬賽克**b.com.tw

謝謝您

# Jeffrey said on 11 April, 2013 08:27 AM

to Leo, 請查收 blog2.darkthread.net/post-2013-04-11-decode-mail-subject.aspx。(另外,已幫你留言中的Email打上馬賽克,以免外流)

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 
(提醒: 因快取機制,您的留言幾分鐘後才會顯示在網站,請耐心稍候)

5 + 3 =

搜尋

Go

<September 2007>
SunMonTueWedThuFriSat
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456
 
RSS
創用 CC 授權條款
【廣告】
twMVC

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication