我在這裏對堆棧溢出搜索職位,並閱讀JoelOnSoftware對編碼後,現在有編碼問題一個基本的把握。但是我遇到了來自Windows剪貼板的一些字符編碼問題。C#UTF-8編碼的問題
的重複性測試是使用IE瀏覽器,並選擇從谷歌主頁複製「廣告程序」文本。
我使用下面的C#代碼拉這個文本斷剪貼板(檢查刪除錯誤):
uint FormatId = GetRegisteredClipboardFormatId("HTML Format");
IntPtr hHtml = Win32.GetClipboardData(FormatId);
uint DataSize = Win32.GlobalSize(hHtml);
byte[] HtmlData = new byte[DataSize];
IntPtr pData = Win32.GlobalLock(hHtml);
Marshal.Copy(pData, HtmlData, 0, (int)DataSize);
Win32.GlobalUnlock(hHtml);
剪貼板HTML數據被認爲是UTF-8編碼的,所以使用下面的將數據轉換爲字符串:
string Content = Encoding.UTF8.GetString(HtmlData);
然而,無視周圍的HTML標籤,這是什麼造成的:
「AdvertisingÂ程序」
我做錯了什麼,誤解了什麼,或者問題出在別處?
感謝您的幫助!
嗯,我想這會導致兩個問題: 1.如果Encoding類知道它採用UTF-8並輸出Unicode(UTF-16?)字符串,是否應該知道如何將UTF-8中的C2 A0轉換爲Unicode中 的正確表示形式?我假設我誤解了基本級別的編碼問題。關閉做更多的研究... 2.我最終將字符串編碼回UTF-8以在瀏覽器中呈現。爲了方便解析,我只轉換爲.NET字符串。有沒有更好的方式來解析文本的原生UTF-8編碼? – 2009-09-26 22:10:03
查看我的編輯..................... – 2009-09-26 23:55:18
優秀!這個訣竅 - 感謝一堆指針! – 2009-09-27 05:14:30