你好: 系統配置: 繁體Window 2000 Profressional .net 1.1 Web.config <globalization requestEncoding="UTF-8" responseEncoding="UTF-8" /> 因為發布新聞﹐可能要發布簡體﹐繁體等別的﹐所以用UTF-8 NavigateUrl='<%# DataBinder.Eval(Container.DataItem, "URL") %>' URL包含中文 在另一個Page得到的是亂碼,怎么解決 謝謝
您好, 根据您提供的情况,我对该问题的理解是您的ASP.NET 应用程序部署在一台使用繁体中文作为系统设置的机器上。该应用程序的某个页面中,通过从数据库数据绑定来输出一个超连接的 URL地址,由于这个URL中包含繁体中文字符,导致当用户点击该连接到另一页面时,出现了乱码数据,对么? 针对这个问题,根据我的经验很可能是由于包含在超连接 URL中的中文字符串在客户端浏览器中被使用其他的编码方式编码过(实际传输的HTTP消息中,URL是不能带有超过 ASCII字符集以外的字符的,所以浏览器会在发送前进行编码,又称 URL Encoding)。而浏览器默认通常会使用本地及其的系统字符集设置来进行编码,比如如果您测试时,客户机使用繁体中文,那么浏览器会使用繁体中文的字符集(如big5)来编码url中的中文字符,但在服务端当ASP.NET 系统处理(解码)URL中被 URL ENCODING地字符时,用的是您在 WEB.CONFIG中设置的 utf-8, 这样就造成了错误。 关于解决方法,在此我想先了解一下您的应用程序中从数据库取出并帮定的url(如下)是什么样的,其中中文字符主要是出现在url中的那些部分. NavigateUrl='<%# DataBinder.Eval(Container.DataItem, "URL") %>' 根据一般情况,我想您是通过url来传递一些简单的值到另一个页面,这是您可能使用的是url querystring来传递变量, 如 http://localhost/testpage.aspx?myvalue=xxxxx 您的程序中中文字符是否也只出现在 querysring 中,如上面url中的 xxxx位置? 如果是这样,我认为您可以考虑针对这些中文字符做一些特殊处理,比如把这些数据和url的其他部分分开处理。 对中文字符,您可以用 Server.UrlEncode方法对它显示的进行url encode, 比如: =========== <asp:HyperLink ID="HyperLink1" runat="server" Text="Redirect" NavigateUrl='<%# "newpage.aspx?name=" + Server.UrlEncode(DataBinder.Eval(....)) %>' ></asp:HyperLink> ============= 当然,很重要的一点是,您也需要检查一下,是否这些含有中文的超连接url在从数据库取出绑定到页面上的时候已经除了问题。作为测试您可以用一个 Label控件来显示这些url, 并且在客户端,用浏览器的 “查看--->源文件“(View--->source...)功能查看输出到客户端的超连接中的中文是否已经被损坏。 以上是我对于这个问题的一些看法和建议,希望有所帮助。如果您仍有关于此的任何问题,欢迎您继续回复我。 谢谢
我已經用上了Server.UrlEncode ,在另外一段用了Server.UrlDecode,但是還是亂碼 顯示的是職能表顯示為 "?能?.",我又用了轉化編碼的方式(UTF8 ------BIG5),但是還是亂碼, 我正在設法怎么更改 requestEncoding ,但是始終找不到requestEncoding的信息, 希望得到您的幫助,thank you for your help@
您好, 很高兴收到您的回复. 针对您目前的情况, 介于该问题的复杂性,我认为目前您可以考虑创建一个简单的测试页面来专门测试这个问题. 您可以在页面上放置一个连接控件(Hyperlink)然后把带有繁体字符得url绑定到HYperlink控件上,来做测试,这样可以避免其他的不相关因素. 同是,在前此的回复中我提到,如果您使用UrlEncode, 必须要针对中文字符,或者 querystring部分进行编码, 不能直接对整个url进行 urlencode, 因为在一般url中(如 http://www.test.org/.....), :, / 这种字符都会被错误的转换掉. 所以我们必须根据我们url中可能出现的连接情况作出有针对性地解决方案, 这也是为什么前一次回复中,我询问您url 格式的原因. 同时, 您也可以用前一次我提到的在客户端浏览器中用 "View source" (查看源文件)来检查是否带中文的超连接是否正确的被输出到了客户端. 另外,对于 requestEncoding (以及其他的<globalization> element中的摄制)您可以参考系面的这篇知识库文章: #在 ASP 和 ASP.NET 全球化问题 http://support.microsoft.com/kb/893663 以上是一些简化测试的建议.如果您仍有关于此的任何问题,欢迎您继续回复我。 谢谢
最終問題解決:
FileSearch.aspx
< asp:DataGrid id = " DataGrid1 " runat = " server " Width = " 100% " BorderWidth = " 1px " BorderColor = " #3366CC "
BorderStyle = " None " AllowPaging = " True " BackColor = " White " CellPadding = " 4 " Font - Size = " Smaller "
AutoGenerateColumns = " False " >
< SelectedItemStyle Font - Bold = " True " ForeColor = " #CCFF99 " BackColor = " #009999 " ></ SelectedItemStyle >
< ItemStyle ForeColor = " #003399 " BackColor = " White " ></ ItemStyle >
< HeaderStyle Font - Bold = " True " ForeColor = " #CCCCFF " BackColor = " #003399 " ></ HeaderStyle >
< FooterStyle ForeColor = " #003399 " BackColor = " #99CCCC " ></ FooterStyle >
< Columns >
< asp:TemplateColumn HeaderText = " 標題 " >
< ItemTemplate >
< asp:HyperLink id = ItemLink runat = " server " Text = ' <%# DataBinder.Eval(Container.DataItem,"Title") %> ' NavigateUrl = ' <%# "download.aspx?filename="+Server.UrlEncode(""+DataBinder.Eval(Container.DataItem,"FileName")+"")+"&fid="+DataBinder.Eval(Container.DataItem,"Id")+"&fileclass="+DataBinder.Eval(Container.DataItem,"FileClass") %> ' >
</ asp:HyperLink >
</ ItemTemplate >
</ asp:TemplateColumn >
< asp:BoundColumn DataField = " VerQty " HeaderText = " 版本 " ></ asp:BoundColumn >
< asp:BoundColumn DataField = " Descriptions " HeaderText = " 注解 " ></ asp:BoundColumn >
< asp:BoundColumn DataField = " Inputdate " HeaderText = " 日期 " ></ asp:BoundColumn >
< asp:BoundColumn DataField = " authors " HeaderText = " 作者 " ></ asp:BoundColumn >
</ Columns >
< PagerStyle HorizontalAlign = " Left " ForeColor = " #003399 " BackColor = " #99CCCC " Mode = " NumericPages " ></ PagerStyle >
</ asp:DataGrid >
Download.aspx
string
pFileName
=
Request.QueryString[
"
filename
"
].ToString();
string pFileClass = Request.QueryString[ " fileclass " ].ToString();
string pFileClass = Request.QueryString[ " fileclass " ].ToString();
但是我在Download得到參數沒有用Server.UrlDecode也可以下載﹐不知道因為什么!