• 【转】asp.net Cookie值中文乱码问题解决方法


    来源:脚本之家、百度空间、网易博客

    http://www.jb51.net/article/34055.htm

    http://hi.baidu.com/honfei

    http://tianminqiang.blog.163.com/blog/#m=0

    ==============================================================================

    cookie中怎么保存中文  

    在用cookie保存用户名的时候,发现cookie值不能存中文,报如下错:

     Control character in cookie value, consider BASE64 encoding your value

    错误发生在:response.addCookie(cookie);

    在以前的编程中也碰到过这样的问题,主要是cookie值里面存在非法参数,如存在” ”、” ”之类的字符时就报报这样的错,但我就个用户名啊,不存在像这些字符啊,不管,我把cookie值设为一个默认的中文用户名,运行看是否出问题,果不其然,出现同样的错误,结果知道,cookie中不能保存中文。

    最后想想把中文转换为UTF-8字符串进行保存应该没问题,即用 URLEncoder.encode(“中文用户名”,”UTF-8″)); 这样把中文用户名转换为UTF-8字符串,运行时通过。在最后接收这个值的时候,用URLDecoder.decode(cookies.getValue(),”UTF-8″);来解码得到我要的中文用户名。
    URLEncode及URLDecode在包java.net里面。


    。。。。。。。。。。。。。。
    其他语言都有URL字符标准化转码函数,如: 
    ASP:server.URLEncode() 
    PHP:urlencode() 
    JAVA:java.net.URLEncoder.encode() 

    以上来自网易博客

    ====================================================================================

    asp.net Cookie值中文乱码问题解决方法

    cookie里面不能写中文,是由于cookie先天的编码方式造成的。所以需要有一种中间编码来过渡。 URLEncode是最好的选择。 

    我们以asp.net为例,代码如下: 

    代码如下:

    设置Cookie时
    HttpCookie cookie = new HttpCookie("name", System.Web.HttpContext.Current.Server.UrlEncode("脚本之家")); Response.Cookies.Add(cookie);
    读取Cookie时:
    if (Request.Cookies["name"] != null) {   Response.Write(System.Web.HttpContext.Current.Server.UrlDecode(Request.Cookies["name"].Value)); }

    注意:编码和解码要一致 

    System.Web.HttpContext.Current.Server.UrlDecode 和 System.Web.HttpContext.Current.Server.UrlEncode 
    System.Web.HttpUtility.UrlDecode 和 System.Web.HttpUtility.UrlEncode

    以上部分来自脚本之家文章《asp.net Cookie值中文乱码问题解决方法》

    ==================================================================================================

    在asp.net2.0中使用Cookie保存中文出现乱码的解决方法

      最近工作中遇到在asp.net2.0中使用Cookie保存中文会出现乱码,解决方法是需要对中文内容进行编码和解码,例如:

    设置cookie时:

    HttpCookie cookie = Request.Cookies["UserName"];
                    if (Session["UserName"] != null)
                    {
                        string userName = Server.UrlEncode(Session["UserName"].ToString());
                        if (cookie != null)
                        {
                            cookie.Value = userName;
                            //cookie.Expires = DateTime.Now.AddDays(1);
                            cookie.Domain = BasePage.DomainName;
                            Response.Cookies.Set(cookie);
                        }
                        else
                        {
                            cookie = new HttpCookie("UserName");
                            cookie.Value = userName;
                            //cookie.Expires = DateTime.Now.AddDays(1);
                            cookie.Domain = BasePage.DomainName;
                            Response.Cookies.Add(cookie);
                        }
                    }

    获取cookie时:

    private string _loginUserName;
            public string LoginUserName
            {
                get
                {
                    if (Session["UserName"] != null && Session["UserName"].ToString() != "")
                    {
                        _loginUserName = Session["UserName"].ToString();
                    }
                    else if (Request.Cookies["UserName"] != null && Request.Cookies["UserName"].Value != "")
                    {
                        _loginUserName = Server.UrlDecode(Request.Cookies["UserName"].Value);
                    }
                    else
                    {
                        _loginUserName = null;
                    }
                    return _loginUserName;
                }
            }

    还有一个条件,即配置文件中需要设置中文格式,如:

    <!-- 全球化          此节设置应用程序的全球化设置。    -->
    <globalization requestEncoding="GB2312" responseEncoding="GB2312"/>

    ---------------------------------------------------------------------------------------------------------------------------

    中文cookie的问题,
    在Windows 2000正常,
    在Windows 2003 sp1下会偶尔出现乱码(遇到双字节特殊字符时候,例子:「`蹆绌�),
    在windows 2003 SP2下基本乱码

    解决办法:
    采用
    Server.UrlEncode(); 
    Server.UrlDecode();


    写入时进行编码:Cookie["MyCookie"] = Server.UrlEncode("中文")
    读取时进行解码:Response.Write(Server.UrlDecode(Request.Cookies("MyCookie").Value()))

    另外编码和解码要一致 
    System.Web.HttpUtility.UrlDecode 和 System.Web.HttpUtility.UrlEncode
    System.Web.HttpContext.Current.Server.UrlDecode 和 System.Web.HttpContext.Current.Server.UrlEncode

    以上来自百度空间

  • 相关阅读:
    myeclipse连接数据库oracle
    一个利用反射进行对象拷贝的例子
    制作jar包
    反射机制(reflection)动态相关机制
    显示hibernate的sql语句
    三大框架之hibernate的反转
    mysql索引及sql调优
    redis面试题
    mysql索引原理
    详谈django中跨域问题
  • 原文地址:https://www.cnblogs.com/huashanqingzhu/p/3753642.html
Copyright © 2020-2023  润新知