【转】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值里面存在非法参数,如存在”\r\n”、”\n”之类的字符时就报报这样的错,但我就个用户名啊,不存在像这些字符啊,不管,我把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
以上来自百度空间
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App