簡體   English   中英

System.Text.Ecoding.UTF8.GetString返回垃圾

[英]System.Text.Ecoding.UTF8.GetString is returning junk

這是困難的一個。 我有一個響應過濾器設置,可以在返回瀏覽器之前轉換html( http://aspnetresources.com/articles/HttpFilters )。 這對所有人的機器都有效,但對我的機器而言卻很好。 實際上,它一直在我的機器上工作,直到我因為鎖定而不得不進行硬重置。

public override void Write(byte[] buffer, int offset, int count)
{
    string strBuffer =  System.Text.UTF8Encoding.UTF8.GetString(buffer, offset, count);

對於其他所有人(也是我的所有人),strBuffer包含HTML。 現在,無論出於何種原因,它都會為我返回垃圾字符。 有任何想法嗎? 我正在拔頭發!!

更新資料

原來是“啟用動態內容壓縮”導致了此問題。 由於某種原因,它在傳遞到過濾器之前會被壓縮。

在web.config中將“ dynamicCompressionBeforeCache”設置為false可以解決此問題。

<urlCompression doStaticCompression="true" doDynamicCompression="true" dynamicCompressionBeforeCache="false" />

聽起來好像出了點問題。 禁閉后,我也有一些奇怪的行為。 對我有用的是刪除C:\\ Windows \\ Microsoft.NET \\ Framework \\ v2.0.50727 \\ Temporary ASP.NET文件中的臨時文件

您已指定以下字節:31、139、8、0、0、0、0、0、4

這不是有效的UTF-8。 特別是,這意味着Unicode字符U + 0031(“信息分隔符ONE”)后跟字節139和8 ...,而139后跟8是無效的UTF-8字節序列。 即使那些沒有形成有效的順序,你會再有5個Unicode的U + 0000字符(NUL),其次是U + 0004(發送結束)。 幾乎沒有有效的HTML。

我不知道您實際上要過濾什么,但這不是有效的UTF-8文本。 實際上,它看起來根本不是文本。 您是否可能實際上試圖將過濾器應用於二進制數據(例如圖像)?

請注意,您的過濾方法還有另一個基本問題:您假設每個緩沖區都包含完整的文本。 您很可能會收到一個包含字符前半部分的緩沖區,然后接收包含字符其余部分的第二個緩沖區。 這就是System.Text.Decoder接口的用途-它是有狀態的,記住部分字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM