`
wxlgzxx_1988
  • 浏览: 68652 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Cookie中保存中文乱码 解决办法

阅读更多

以前用cookie只是存一些简单的英文串或者其他的登录信息,没有涉及到中文,所以对cookie也没多作研究,最近一项目中需要用到cookie,并且要用cookie存储中文信息,不料却出现差错,存进去了,发现数据库表里全是乱码,而且对cookie串拆分,读出来的发现并不是自己想要的结果。后来发现存储中文需要有一个编码,读出来的时候以同样的编码方式解码。
中文与英文字符不同,中文属于Unicode字符,在内存中占4个字符,而英文属于ASCII字符,内存中只占2个字节。Cookie中使用Unicode字符时需要对 Unicode字符进行编码,否则会乱码。编码可以使用java.net.URLEncoder类的encode(String str, String encoding)方法,解码使用java.net.URLDecoder类的decode(String str, String encoding)方法,例如:
// 使用中文的 Cookie. name 与 value 都使用 UTF-8 编码

    Cookie cookie = new Cookie(

        URLEncoder.encode("姓名", "UTF-8"),

        URLEncoder.encode("老王", "UTF-8"));

    response.addCookie(cookie); // 发送到客户端
读取时候:
if(request.getCookies() != null){

        for(Cookie cc : request.getCookies()){      // 遍历所有的Cookie

            String cookieName = URLDecoder.decode(cc.getName(), "UTF-8");

            String cookieValue = URLDecoder.decode(cc.getValue(), "UTF-8");

           
            out.println(cookieName + "=" + cookieValue + "; <br/>");

        }

    }
%提示:Cookie中保存中文只能编码。一般使用UTF-8编码即可。不推荐使用GBK等中文编码,因为浏览器不一定支持,而且JavaScript也不支持GBK编码。

    Cookie不仅可以使用ASCII字符与Unicode字符,还可以使用二进制数据。例如在Cookie中使用数字证书,提供安全度。使用二进制数据时也需要进行编码。下面的例子使用BASE64编码在Cookie中保存二进制文件:
   File file = new File(this.getServletContext().getRealPath("cookie.
    gif"));

   

    byte[] binary = new byte[(int)file.length()];       // 二进制数组

   

    // 从图片文件读取二进制数据.

    InputStream ins = this.getServletContext().getResourceAsStream
    (file.getName());

    ins.read(binary);

    ins.close();    

    String content = BASE64Encoder.class.newInstance().encode(binary);
    // BASE64 编码     

    Cookie cookie = new Cookie("file", content);
     // 包含二进制数据的 Cookie

    response.addCookie(cookie);    // 将 Cookie 发送到客户端

从 Cookie 中获取到的二进制图片:<img src="base64_decode.jsp" /> <br/>

<textarea id='cookieArea' style='width:100%; height:200px; '></textarea>

<script type="text/javascript">cookieArea.value=document.cookie;</script>
程序使用的二进制数据来自根目录下的cookie.gif文件。程序先将二进制数据写进客户端Cookie中,然后又将Cookie中的二进制数据还原并显示。输入框中用JavaScript程序显示了客户端Cookie的所有内容。

解码并显示图片的源代码如下:
out.clear();                                    // 清除输出

    for(Cookie cookie : request.getCookies()){      // 遍历Cookie

        if(cookie.getName().equals("file")){        // 找到名为file的Cookie

           

            byte[] binary =

            BASE64Decoder.class.newInstance().decodeBuffer(cookie.
            getValue().replace(" ", ""));   // 解码BASE64编码的二进制内容

                       

            response.setHeader("Content-Type", "image/gif");
                                            // 设置内容类型为 gif 图片

            response.setHeader("Content-Disposition", "inline;
            filename=cookie.gif");
[color=blue][/color][size=x-small][/size]
            response.setHeader("Connection", "close");         

            response.setContentLength(binary.length);   // 设置输出内容的长度

            response.getOutputStream().write(binary);   // 输出到客户端

            response.getOutputStream().flush();     // 清空缓存

            response.getOutputStream().close();     // 关闭输出流

            return;

        }

    }
%注意:本程序仅用于展示Cookie中可以存储二进制内容,并不实用。由于浏览器每次请求服务器都会携带Cookie,因此Cookie内容不宜过多,否则影响速度。Cookie的内容应该少而精。

分享到:
评论

相关推荐

    js 中存取 cookie 解决中文乱码

    js 中存取 cookie 解决中文乱码

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

    在Web开发中,"Cookie实现记住密码及解决中文乱码"是常见的用户交互功能,它涉及到客户端和服务器端的数据交换。下面将详细讲解这个主题。 首先,Cookie是Web服务器发送到用户浏览器并存储的一小块数据,用于在多次...

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

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

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

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

    JS cookie中文乱码解决方法

    本文将详细介绍如何解决JS中Cookie中文乱码的问题。 首先,我们需要理解Cookie的设置过程。在JS中,设置Cookie通常通过`document.cookie`属性来完成。下面是一个简单的设置Cookie的例子: ```javascript function ...

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

    在Java Web开发中,中文乱码问题一直是开发人员面临的常见问题之一。中文乱码通常是由于在字符编码转换过程中,字符集不一致或设置不当所导致。为了解决这一问题,首先需要了解Java Web工程字符编码的基本理论,包括...

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

    但是,由于`unescape()`函数对于处理UTF-8编码的中文字符并不理想,因此当cookie中保存了中文字符时,使用`unescape()`函数进行解码会导致乱码的产生。 为了解决这个问题,我们可以采用`decodeURI()`函数。`...

    ajax乱码解决方案

    UTF-8编码是一种常见的Unicode实现,它使用1到4个字节来表示每个Unicode字符,对于中文汉字,通常每个字占用3个字节。因此,当Ajax发送或接收UTF-8编码的数据时,理论上不应出现乱码。 然而,乱码问题可能源于以下...

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

    当Cookie中包含中文字符时,由于HTTP协议默认使用ASCII编码,可能会出现乱码。解决这个问题的关键在于确保正确的字符编码。在创建Cookie时,需使用`setCharacterEncoding()`方法设置字符集,如`setCharacter...

    Cookie实例保存账号和密码

    Cookie是由服务器端发送到浏览器的一小段文本信息,浏览器会将其保存,并在后续的请求中自动发送回服务器。Cookie通常包含键值对,键表示数据的名称,值是实际的数据。在本例中,键可能是"username"和"password",...

    javaweb中Cookie对用户密码保存的例子

    在JavaWeb开发中,Cookie是一种常见的技术,用于在客户端存储少量信息,比如用户的登录状态、购物车内容等。本文将详细解析"javaweb中Cookie对用户密码保存的例子",并探讨如何使用Cookie实现购物车功能。 首先,...

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

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

    解决Cookie读写中文

    在本文档中,我们探讨了如何在Java Web应用中解决Cookie读写中文的问题。这个问题通常出现在处理中文字符时,由于编码不一致导致的乱码问题。以下是一些关键知识点和解决方案: 1. **编码问题**:在Web开发中,特别...

    java web开发解决乱码问题

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

    UIWebView的cookie读取与保存

    本文将详细讲解如何在UIWebView中进行Cookie的读取与保存。 首先,理解Cookie的基本概念。Cookie是由服务器发送到用户的浏览器并存储在本地的小型文本文件,用于在用户与服务器之间维持状态。当用户再次请求同一...

    在C#中可以使用CookieContainer 对象来保存登录后的Cookie信息

    ### 在C#中使用CookieContainer对象保存登录后的Cookie信息 #### 概述 在Web开发过程中,为了保持用户的会话状态或存储用户的一些特定信息,通常会使用到Cookie技术。Cookie是一种小型的数据文件,用于存储客户端...

    cookie保存用户名和密码

    Cookie是一种客户端存储机制,由服务器端发送到用户的浏览器并存储在本地,用于在后续请求中识别用户身份和状态。下面将详细阐述Cookie如何保存用户名和密码以及相关的知识点。 首先,理解Cookie的基本原理。Cookie...

    ajax乱码解决汇总

    当使用Ajax GET请求返回页面时,响应文本(RESPONSETEXT)中的中文乱码通常是因为XMLHttpRequest对象按照UTF-8解码了服务器返回的非UTF-8编码的响应体。为解决此问题,服务器需要在响应头中明确指定编码类型,例如在...

    利用COOKIE保存层拖动数据实例

    在IT行业中,尤其是在Web开发领域,Cookie是一种非常重要的技术,用于在客户端存储少量的数据。"利用Cookie保存层拖动数据实例"是一个典型的Web交互优化案例,它涉及到用户界面的个性化和用户体验的提升。以下是关于...

    jQuery Cookie 用户名 密码保存到 cookie中

    Cookie是由服务器端发送到客户端(浏览器)的一小段文本信息,浏览器在后续的请求中会自动携带这些信息回服务器,常用于用户会话管理、个性化设置等场景。在本例中,我们将利用Cookie来保存用户的登录状态,特别是...

Global site tag (gtag.js) - Google Analytics