关于url参数中文乱码的问题 【asp.net C#】

最近做一个小系统,需要url传递中文参数。做完测试的时候,客户对我说,点击分类之后,什么也显示不出来。我说不可能啊,因为我这里显示没问题。后来才发现,原来自己用的是IE7,而客户用的是IE6,我换做IE6测试,果然是这样。

这样我就开始在百度上找啊找,最后找到一个在web.config上设置url参数格式。即在<system.web>下面加上<globalization requestEncoding="gb2312" responseEncoding="gb2312" culture="zh-CN" uiCulture="zh-CN" responseHeaderEncoding="gb2312" fileEncoding="gb2312" />

但是,令我失望的是,这样对于传递一个参数还行。在url已经有一个参数的基础上再动态添加参数,就不行了,又出现乱码。
这样,无奈之下,只得用base64编码了。一开始用的一个比较简单的,以前用过的,但是还是会错误。可笑的是,一个“城”字,进行编码,然后进行解码,就会报错。我也不知道为什么,偏偏对这个字特殊优待。
这样我不得不再去百度搜,终于找到另一个别人做好的C#类。很好用,对中文也支持很好,这下总算是大功告成了!!!
最后感叹,中国这样经典的文字,在计算机编程语言里面,却是最最不友好的东西。真难为我们这些中国程序员了。
好了,把那个base64编码的类提供给大家参考
using System; using System.Text; using System.IO; using System.Security; using System.Security.Cryptography;
public class EnCode {
/// <summary> /// 将字符串使用base64算法加密 /// </summary> /// <param name="SourceString">待加密的字符串</param> /// <param name="Ens">System.Text.Encoding 对象,如创建中文编码集对象: /// System.Text.Encoding.GetEncoding("gb2312")</param> /// <returns>编码后的文本字符串</returns> public static string EncodingString(string SourceString, System.Text.Encoding Ens) { return Convert.ToBase64String(Ens.GetBytes(SourceString)); } /**/ /// <summary> /// 使用缺省的代码页将字符串使用base64算法加密 /// </summary> /// <param name="SourceString">待加密的字符串</param> /// <returns>加密后的文本字符串</returns> public static string base64Encode(string SourceString) { return EncodingString(SourceString, System.Text.Encoding.Default); } /**/ /// <summary> /// 从base64编码的字符串中还原字符串,支持中文 /// </summary> /// <param name="Base64String">Base64加密后的字符串</param> /// <param name="Ens">System.Text.Encoding对象,如创建中文编码集对象: /// System.Text.Encoding.Default</param> /// <returns>还原后的文本字符串</returns> public static string DecodingString(string Base64String, System.Text.Encoding Ens) { return Ens.GetString((Convert.FromBase64String(Base64String))); } /**/ /// <summary> ///使用缺省的代码页从Base64编码的字符串中还原字符串,支持中文 /// </summary> /// <param name="Base64String">Base64加密后的字符串</param> /// <returns>还原后的文本字符串</returns> public static string base64Decode(string Base64String) { return DecodingString(Base64String, System.Text.Encoding.Default); } /**/ /// <summary> /// 对一个文件进行Base64编码,并返回编码后的字符串 /// </summary> /// <param name="strFileName">文件的路径和文件名</param> /// <returns>对文件进行Base64编码后的字符串</returns> public static string EncodingFileToString(string strFileName) { System.IO.FileStream fs = System.IO.File.OpenRead(strFileName); System.IO.BinaryReader br = new System.IO.BinaryReader(fs); string Base64String = Convert.ToBase64String(br.ReadBytes((int)fs.Length)); br.Close(); fs.Close(); return Base64String; } /**/ /// <summary> /// 对一个文件进行Base64编码,并将编码后的内容写入到一个文件 /// </summary> /// <param name="strSourceFileName">要编码的文件地址,支持任何类型的文件</param> /// <param name="strSaveFileName">要写入的文件路径</param> /// <returns>如果写入成功,则返回真</returns> public static bool EncodingFileToFile(string strSourceFileName, string strSaveFileName) { string strBase64 = EncodingFileToString(strSourceFileName); System.IO.StreamWriter fs = new System.IO.StreamWriter(strSaveFileName); fs.Write(strBase64); fs.Close(); return true; } /**/ /// <summary> /// 将Base64编码字符串解码并存储到一个文件中 /// </summary> /// <param name="Base64String">经过Base64编码后的字符串</param> /// <param name="strSaveFileName">要输出的文件路径,如果文件存在,将被重写</param> /// <returns>如果操作成功,则返回True</returns> public static bool DecodingFileFromString(string Base64String, string strSaveFileName) { System.IO.FileStream fs = new System.IO.FileStream(strSaveFileName, System.IO.FileMode.Create); System.IO.BinaryWriter bw = new System.IO.BinaryWriter(fs); bw.Write(Convert.FromBase64String(Base64String)); //bw.Write(Convert.ToBase64String) bw.Close(); fs.Close(); return true; } /**/ /// <summary> /// 将一个由Base64编码产生的文件解码并存储到一个文件 /// </summary> /// <param name="strBase64FileName">以Base64编码格式存储的文件</param> /// <param name="strSaveFileName">要输出的文件路径,如果文件存在,将被重写</param> /// <returns>如果操作成功,则返回True</returns> public static bool DecodingFileFromFile(string strBase64FileName, string strSaveFileName) { System.IO.StreamReader fs = new System.IO.StreamReader(strBase64FileName, System.Text.Encoding.ASCII); char[] base64CharArray = new char[fs.BaseStream.Length]; fs.Read(base64CharArray, 0, (int)fs.BaseStream.Length); string Base64String = new string(base64CharArray); fs.Close(); return DecodingFileFromString(Base64String, strSaveFileName); } /**/ /// <summary> /// 从网络地址一取得文件并转化为base64编码 /// </summary> /// <param name="strURL">文件的URL地址,必须是绝对URL地址</param> /// <param name="objWebClient">System.Net.WebClient 对象</param> /// <returns>返回经过Base64编码的Web资源字符串</returns> public static string EncodingWebFile(string strURL, System.Net.WebClient objWebClient) { return Convert.ToBase64String(objWebClient.DownloadData(strURL)); } /**/ /// <summary> /// 从网络地址一取得文件并转化为base64编码 /// </summary> /// <param name="strURL">文件的URL地址,必须是绝对URL地址</param> /// <returns>返回经过Base64编码的Web资源字符串</returns> public static string EncodingWebFile(string strURL) { return EncodingWebFile(strURL, new System.Net.WebClient()); } }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值