我以為我經過上次的錯誤,中文亂碼可以不會再出現在我的生活中。
直到我的膝蓋中了一箭。 (這裡)
找了一陣子,原來有人,以前的程式碼用了Server.UrlDecode
HttpUtility.UrlDecode 與 Server.UrlDecode 真的不一樣。
我寫了以下的程式來證明:
Function WriteOutput(ByVal str As String) As String
Response.AppendHeader("Content-Type", "text/html;charset=UTF-8")
Dim bs As Byte() = System.Text.Encoding.UTF8.GetBytes(str)
Response.ContentEncoding = System.Text.Encoding.UTF8
Response.OutputStream.Write(bs, 0, bs.Length)
Return "OK"
End Function
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
WriteOutput("System.Text.Encoding.Default.EncodingName:" + System.Text.Encoding.Default.EncodingName + "<br/>")
WriteOutput("System.Text.Encoding.Default.WebName:" + System.Text.Encoding.Default.WebName + "<br/>")
WriteOutput("HttpUtility.UrlDecode:" + HttpUtility.UrlDecode("%e4%b8%ad") + "<br/>")
WriteOutput("Server.UrlDecode:" + Server.UrlDecode("%e4%b8%ad") + "<br/>")
End Sub
結果這就是不一樣:
附帶說明一下,這個現象不一定會在你的伺服器出現。在我的開發環境,如下。
我現在還找不到確切指出設定不同的地方。
我只看到兩個 EncodingName 所出現的字串是不同的。
據網路消息,說 Server.UrlDecode 是用系統編碼。可是我還沒辦法找到如何顯示現在系統編碼。
沒有留言:
張貼留言