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

这样我就开始在百度上找啊找,最后找到一个在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.Collections.Generic;
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());
    }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值