2009-02-03 55 views
2

你是如何獲得ASP.NET輸出UTF-16編碼文本的?你是如何讓ASP.NET輸出UTF-16編碼文本的?

我在.NET中序列化一個對象,默認情況下它是UTF-16格式。現在我想將該字符串作爲輸出響應發送到.ashx請求。

我得到錯誤: 從當前編碼切換到不支持指定的編碼。處理資源時出錯

如何告訴我的網站或頁面使用UTF-16格式。

謝謝。

更新:閱讀答案。

+0

拋出異常的確切線是什麼?請編輯問題。 – 2009-02-03 00:27:05

+0

Internet Explorer中的XML解析器由於編碼格式而拋出錯誤。所以我認爲在技術上它打破了輸出的前幾個字符。看到我的第四或第五個評論,我接受的答案是爲了讓它Xml序列化爲UTF-8 – BuddyJoe 2009-02-03 20:06:05

回答

3

一般:不要。

作爲UTF-16的網頁混淆了許多工具,並使瀏覽器以奇怪的,意想不到的方式行事。 (特別是鏈接的腳本,表單提交,代理)。 UTF-16只能作爲一個二進制對象安全地提供服務,因此,對於Web內容來說,它是一種ASCII超集的編碼 - UTF-8是最明顯的選擇。

您引用的錯誤通常是當您嘗試讀取其文件的實際編碼與文件的實際編碼衝突的XML文件時得到的錯誤。沒有一個超集的ASCII編碼曾經發生衝突,因爲'xml encoding'是ASCII並且在所有這些編碼中表示相同,但​​是如果您已將encoding =「utf-16」放入未保存爲UTF- 16,或者你有而不是當它在時,那麼解析器不能應付邏輯不可能性。

0

以下爲我工作:

Dim utf16 = New UnicodeEncoding(False, True) 
Response.BinaryWrite(utf16.GetPreamble) 
Response.ContentEncoding = utf16 

順便說一句,我需要做的這一點,因爲我會發送含有Unicode字符到Excel中的HTML表。 (我知道,不是創建Excel文件的最佳方式!)

Excel(和LibreOffice Calc)期望utf-16並且不能用於utf-8。 Excel在開始時也需要UTF16 BOM,因此需要調用GetPreamble。