`
yiminghe
  • 浏览: 1452899 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

cookie 中文编码问题

阅读更多

http 协议

   根据 RFC2616 ,一个 http 请求/响应可以分为三段

 

状态行

头区域

体区域

 

其中状态行和头区域只能包含 ascii(iso8859-1 ) 编码的字符,而 cookie 恰恰属于头区域,那么要想使得 cookie 承载中文字符,则要进行编码,使得编码后的字符在 ascii 字符范围内。

服务器编码:

一般来说有三种

Base64

服务器端通过

 

new BASE64Encoder().encode(x.getBytes("utf-8"))

 

来编码。

URLEncoder

一般用来当 content-type 为 application/x-www-form-urlencoded 时对 html body 体进行编码,编码后字符在 ascii 范围内,那么也就可以用来编码 cookie 值信息。

 

URLEncoder.encode(x,"utf-8")
 

注意:一定要编码为 utf-8,这样可以方便客户端 javascript 解码。

Unicode

由于 java 与 javascript 内部都是用 unicode 来表示字符,故可以直接使用 unicode 编码中文字符(英文当然也可以):

 

static String unicode(char c) {
		String str=Integer.toHexString((int)c);
		while (str.length() < 4) {
			str = "0" + str;
		}
		return "\\u" + str;
}

 

客户端解码:

对应编码可用 base64decodeURIComponent

 

unicode 传到客户端读出后,假设存在变量 v 中为 "\\u6211" (注意不是 \u6211 ,否则就不需要解码了),解码方法其实也挺多:

escape

已经不太推荐 了,(详细 : 不能 escape '+' ,非 ascii 字符 escape 后不是合适的 form data 格式),用做 cookie 解码的话也可以:

 

unescape("\\u6211\\u6211".replace(/\\u([0-9]{4,5})/g,"%u$1"));

自己解码:

var re=[];
"\\u6211\\u6211".replace(/\\u([0-9]{4,4})/g,function(m,g){
  re.push(String.fromCharCode(parseInt(g,16)));
});
alert(re.join(""));

 eval

更巧妙的是可以利用 eval 进行自动解码(实质是转义的作用):

 

eval("'"+"\\u6211\\u6211"+"'")

new Function

但是 eval is evil ,那么可以用 new Function :

 

new Function("return '"+"\\u6211\\u6211"+"'")();

json parser

或者最想不到的就是可以直接用 json parser :

 

JSON.parse('{"v":"'+"\\u6211\\u6211"+'"}').v;

 

安全高效

分享到:
评论
2 楼 yiminghe 2011-02-17  
peiran102 写道

这段代码 不是js代码吧?


服务器端 java 编码
1 楼 peiran102 2011-02-17  
javaeye 发个评论可真复杂 光测验就十几条!

static String unicode(char c) {
String str=Integer.toHexString((int)c);
while (str.length() < 4) {
str = "0" + str;
}
return "\\u" + str;
}
这段代码 不是js代码吧?

编码问题 以前也遇见过一次  base64 unicode escape 都试了 问题是 中文的个数 是偶数 就没问题 是奇数 就错误 后来实在不行就放弃了  好像是  在 ajax应用中 出现的 问题

相关推荐

    js 中存取 cookie 解决中文乱码

    js 中存取 cookie 解决中文乱码

    Cookie实现记住密码及解决中文乱码

    然而,当Cookie中包含中文字符时,可能会遇到乱码问题。这是因为不同的编码方式可能导致字符无法正确解析。为了解决这个问题,我们需要确保以下几个环节的编码一致性: 1. **服务器端编码**:服务器处理请求和响应...

    JS cookie中文乱码解决方法

    然而,当尝试存储或读取包含中文字符的Cookie时,可能会遇到乱码问题。这是因为Cookie默认是以ASCII编码存储的,而中文字符通常需要UTF-8或其他Unicode编码来正确表示。 本文将详细介绍如何解决JS中Cookie中文乱码...

    解决Asp.net 读取cookie中保存的中文字符乱码问题

    cookie储存中文是会乱码的,在使用cookie储存中文的时候需要使用UrlEncode编码,同时读取cookie中的中文时需要使用功能UrlDecode解码。 正文 Cookie是保存在客户端硬盘或内存中的一小段文本信息,如网站、用户、会话...

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

    在ASP.NET开发中,Cookie是常用的用户数据存储机制,它将数据存储在用户的浏览器中,以便在用户访问网站...通过理解和应用这些知识点,开发者可以有效地处理ASP.NET中的Cookie中文乱码问题,确保数据的正确存储和读取。

    Cookie的存入和读取,并解决中文问题

    本文将深入探讨Cookie的存入和读取过程,并特别关注如何解决中文字符编码问题。以下是对相关知识点的详细说明: 1. **Cookie的定义与作用** Cookie是由服务器端发送到客户端(浏览器)的一小段文本信息,浏览器会...

    JavaScript读取中文cookie时的乱码问题的解决方法

    然而,在处理包含中文字符的cookie时,我们常常会遇到乱码问题,这是因为cookie中的中文字符在编码和解码过程中没有得到正确的处理。 在早期的JavaScript开发中,经常使用的`unescape()`函数是用来对URL中的百分号...

    Java WEB开发中的中文乱码问题解决方法.pdf

    然而,在Java Web开发中处理中文字符时,编码不一致常会导致乱码问题。 字符编码转换在Java Web应用开发中是不可或缺的一个过程。计算机只能识别二进制数,而字母、数字、汉字等通过字符编码转换成二进制形式存储。...

    解决Cookie读写中文

    这个问题通常出现在处理中文字符时,由于编码不一致导致的乱码问题。以下是一些关键知识点和解决方案: 1. **编码问题**:在Web开发中,特别是涉及到文本数据的存储和传输时,编码是非常重要的。常见的编码格式有...

    java web开发解决乱码问题

    - **乱码问题**:Cookie中可能会出现乱码问题,尤其是当Cookie中包含中文字符时。 ##### 4.3 JSP常见错误 - **WEB-INF目录下不应放置静态资源文件**:如HTML、JSP等,这些文件应放在应用的WebContent目录下。 - **...

    .NET中文乱码的解决方法分享.docx

    .NET中文乱码的解决方法分享 .NET中文乱码的解决方法是ASP.NET...同时,本文还提供了一些其他相关的解决方案,例如解决ASP.NET中的各种乱码问题、ASP.NET Core中的中文乱码问题、ASP.NET Cookie中的中文乱码问题等等。

    jquery.cookie使用方法(中文详细版)

    ### jQuery.cookie 使用方法详解 #### 一、简介 jQuery.cookie 是一个轻量级的 jQuery 插件,专门用于处理浏览器中的 Cookie。它提供了一种简便的方式来读取、写入及删除 Cookie,使得开发者无需手动编写复杂的 ...

    jsp使用cookie存储中文示例分享.docx

    2. 确保编码和解码时使用的字符集一致,避免乱码问题。 3. 遍历Cookie数组时,通过比较Cookie名称来找到目标Cookie并读取其值。 通过这个示例,开发者可以学习到如何在实际项目中处理中文数据,尤其是在涉及到跨...

    cookie_session知识点

    - 解决中文乱码问题,对于POST请求,可以使用`request.setCharacterEncoding("gbk")`设定请求体的编码。 - GET请求的编码问题,可以使用`new String(value.getBytes("iso8859-1"), "gbk")`进行转换。另外,可以在...

    jscript中使用cookie

    如果值中包含这些特殊字符或中文,可以使用`escape()`函数编码,取值时使用`unescape()`解码。例如: ```javascript document.cookie = "str=" + escape("I love ajax"); // 实际存储的值为:str=I%20love%20ajax `...

    【ASP.NET编程知识】asp.net中的cookie使用介绍.docx

    本文将对 ASP.NET 中的 Cookie 使用进行介绍,包括 Cookie 的基本概念、操作、跨域设置、中文乱码问题解决方法等。 一、Cookie 的基本概念 Cookie 是一种小型文本文件,存储在客户端的浏览器中,由服务器生成并发...

    safari cookie设置中文失败的解决方法

    一开始以为是cookie中文乱码的问题,后来跟踪发现,cookie的值压根就没赋值成功,网上查了资料,发现safari不允许非ASCII编码的值,换句话说:不允许中文存储。 为了解决这个问题,在设置cookie值的时候必须先编码,...

    用Javascript读取中文COOKIE的解决办法

    在Cookie的使用中,我们发现这样一个问题:... 我们知道,写入Cookie内容前需要进行escape(十六进制编码),编码时又是以字节为单位的,这就是问题的关键所在:任何一个汉字都会被拆成两个字节分别编码;而在读Cook

Global site tag (gtag.js) - Google Analytics