ASP.NET中与编码方式相关的问题

本文介绍了ASP.NET中常见的编码问题及解决办法,包括Cookie中写入汉字、URL传递中文参数、导出Excel、UTF-8转GB2312等,并提供自动识别文件编码的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.在Asp.net的HttpCookie中写入汉字,读取时为乱码
其实这是因为文字编码而造成的,汉字是两个编码,所以才会搞出这么个乱码出来!其实解决的方法很简单:只要在写入Cookie时,先将其用Url编码,然后再写入,当我们读取时再解码就OK了.

  例子:
  Cookie的写入:
   HttpCookie cookie=new HttpCookie("Simple");
   cookie.Values.Add("Simple1",HttpUtility.UrlEncode("中文字符测试!"));
   cookie.Values.Add("Simple2","The English Charactor Test!");
   Response.AppendCookie(cookie);
  Cookie的读取:
   HttpCookie cookie=Request.Cookies["Simple"];
   string simple1=HttpUtility.UrlDecode(cookie["Simple1"]);
   string simple2=cookie["Simple2"];
  
  这样
  simple1="中文字符测试!";
  simple2="The English Charactor Test!";

二.地址栏中传递带中文字符的参数

传递参数时先将其进行urlencode编码,然后再赋给URL连接,避免获取中文参数时,取出乱码的问题;
例子:
string Text = "地址栏中传递带中文字符的参数"
Text = System.Web.HttpUtility.UrlEncode(Text, System.Text.Encoding.GetEncoding("GB2312"));


三.导出EXCEL时与编码相关的问题
...... 
 
四.UTF-8编码转换为GB2312编码

最近在做的广告系统中,碰到了一个问题,广告系统采用的UTF-8编码,而一些使用这套广告系统的频道页面使用的是GB2312编码。当然也有使用UTF-8编码的频道使用这套广告系统。

频道页面是通过嵌入类似如下的代码方式,来调用广告的。具体那个时间显示那个广告,或者那些广告组合是广告系统自己处理的。

< script type = " text/javascript " >
<!--
csdn_AD_Position_GroupID 
=   " {f05ff3bf-246b-4d71-a101-b5d4ee3f6cd3} " ;
csdn_AD_Page_Url 
=  document.location;
// -->
</ script >
< script type = " text/javascript "  src = http://ads.youkuaiyun.com/AD/Show_js_AD.js   >
</ script >
不同编码的页面、脚本之间互相引用,就会产生乱码的问题,解决方法就是统一成一种编码。
asp.net 中,如果要修改输出页面的编码,可以通过修改web.config中以下配置信息

<globalization requestEncoding="utf-8" responseEncoding="utf-8" />

以上只是修改整体的默认编码,如果只有某个页的编码需要修改,ASP.net 中则可以简单的使用下面代码:

     
Encoding gb2312 = Encoding.GetEncoding( " gb2312 " ); Response.ContentEncoding = gb2312;
在非ASP.net 应用中,可能你读到的数据是UTF-8编码,但是你要转换为GB2312编码,则可以参考以下代码:

 

     
string utfinfo = " document.write(/"alert('aa你好么??');/"); " ; string gb2312info = string .Empty; Encoding utf8 = Encoding.UTF8; Encoding gb2312 = Encoding.GetEncoding( " gb2312 " ); // Convert the string into a byte[]. byte [] unicodeBytes = utf8.GetBytes(utfinfo); // Perform the conversion from one encoding to the other. byte [] asciiBytes = Encoding.Convert(utf8, gb2312, unicodeBytes); // Convert the new byte[] into a char[] and then into a string. // This is a slightly different approach to converting to illustrate // the use of GetCharCount/GetChars. char [] asciiChars = new char [gb2312.GetCharCount(asciiBytes, 0 , asciiBytes.Length)]; gb2312.GetChars(asciiBytes, 0 , asciiBytes.Length, asciiChars, 0 ); gb2312info = new string (asciiChars);
当然,其他各种编码之间的转换,跟上述代码也类似的,就不描述了。

五.ASP.NET自动识别GB2312与UTF-8编码的文件

http://www.webjx.com  更新日期:2007-10-15 22:27  出处:网页教学网

Question

在简体中文系统中,我们有时候需要打开一个保存在磁盘上的纯文本文件,例如txt,但却不知道其保存编码,该怎么办呢?

如果文本只需要在Windows上显示,那就很幸运了,因为无论是GB2312还是UTF-8编码的string都能够正确显示。但如果需要输出到ASP.NET页面上就不是那么简单了,因为如果页面编码为UTF-8但纯文本文件导入的string是GB2312,那就会导致乱码,反之亦然。因此,我们需要一种方法自动识别磁盘上的纯文本文件到底是么编码的。

Answer

StreamReader其实是有编码自动检测功能,不过因为它仅仅检测前3个字节,所以只能UTF-8、Little-Endian Unicode、Big-Endian Unicode之前作出选择,如果上述3个都不匹配,就选择用户提供的编码。因此,我们可以提供GB2312编码给StreamReader,让它在GB2312和UTF-8之前自动作出选择。
using  (StreamReader reader  =   new  StreamReader(path, Encoding.Default)
{
  
string  line;
  
while  ((line  =  reader.ReadLine())  !=   null )
  {
    FileTextBox.InnerHtml 
+=  Server.HtmlEncode(line)  +   " " ;
  }
  FileEncodingNameLabel.Text 
=  reader.CurrentEncoding.EncodingName;
}



上述代码使用Encoding.Default初始化StreamReader,Encoding.Default指的是系统的默认ANSI编码,在简体中文系统中就是GB2312。这样写能够让代码保持有一定的兼容性,例如在繁体中文系统就变成了自动在Big5和UTF-8之间做出选择。之后的代码就是用StreamReader逐行读取文件内容并放到FileTextBox中,最后通过StreamReader的CurrentEncoding属性获取编码名称并显示在FileEncodingNameLabel中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值