ASP.NET中与编码方式相关的问题
2008-05-08 14:41
351 查看
一.在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.csdn.net/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中。 |
相关文章推荐
- asp.net 和asp共享COOKICE的问题(asp.net asp对汉字的编码方式)
- asp.net 页面编码常见问题小结
- asp.net页面编码问题
- 手动配置ASP.NET4.5 --- 注册ASP.Net4.0 相关问题
- asp.net下载时避免编码问题的出现
- Asp.Net页面的编码问题
- 还是编码,最近老和编码打交道-_-: 关于ASP页面 post 数据到ASP.NET页面的问题
- Javascript与ASP.NET(一般处理程序)关于URL(get方式)传递中文乱码问题的解决方案
- win7下安装IIS7.0及部署VS2010 ASP.NET程序网站的相关问题
- ASP.NET CORE中控制器内return HTML 内容自动编码问题
- Asp.net Gridview 导出到Excel【解决编码乱码问题】
- 用外部程序添加的UTF-8编码的Web窗体在ASP.NET中显示乱码的问题的解决
- 在asp.net页面中的一些有关编码的问题
- asp.net页面编码问题
- 关于在ASP.NET中以DCOM方式操作Excel的几个问题
- ASP.NET TreeView相关问题
- asp.net中取文件后缀名的相关小问题
- 安装完vs.2005之后,重新安装iis后无法使用http方式访问asp.net工程的页面的问题的解决方法
- Asp.Net 之 StreamWriter文件操作 生成文件注意编码方式
- asp.net通过get、post传值编码问题