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

decode encode方法的具体解释

 
阅读更多
引用


decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串转换成unicode编码。

      encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode('gb2312'),表示将unicode编码的字符串转换成gb2312编码。

     因为在jsp中对中文进行了编码的时候用的是UTF-8的编码方式,而在servlet中调用request.getParameter();方法的时候使用服务器指定的编码格式自动解码一次,所以前台编码一次后台解码一次而解码和编码的方式不用所以造成了乱码的出现,

这就类似于以下代码:

          
String name=java.net.URLEncoder.encode("测试", "UTF-8");
System.out.println(name);
System.out.println(java.net.URLDecoder.decode(name, "ISO-8859-1"));

编码后的是%E6%B5%8B%E8%AF%95。。
而用ISO-8859-1解码后的是???è?。。

但是如果调用的是
System.out.println(java.net.URLDecoder.decode(name, "UTF-8"));

则结果是打印“测试”。

这就印证了 之前为什么我在servlet中调用java.net.URLDecoder.decode(request.getParameter("name"), "UTF-8")方法和调用java.net.URLDecoder.decode(request.getQueryString(), "UTF-8")所得到的结果是不一样的,就是由于在request.getParameter("name")之前会自动做一次解码的工作,而且是默认的ISO-8859-1。

所以,在使用java.net.URLEncoder.decode()和java.net.URLDecoder.decode(),的时候需要在前端页面中使用两次java.net.URLDecoder.decode()方法。

使用两次编码的过程相当于如下代码:
复制代码
            String name=java.net.URLEncoder.encode("测试", "UTF-8");
            System.out.println(name);
            name=java.net.URLEncoder.encode(name,"UTF-8");
            System.out.println(name);
            name=java.net.URLDecoder.decode(name, "UTF-8");
            System.out.println(name);
            System.out.println(java.net.URLDecoder.decode(name, "UTF-8"));
复制代码

输出为:

            %E6%B5%8B%E8%AF%95
            %25E6%25B5%258B%25E8%25AF%2595
            %E6%B5%8B%E8%AF%95
            测试

第一次编码后将汉字编码为%和字母数字的格式,而第二次编码的时候是对%字母数字进行编码,虽然解码的时候使用的是ISO-8859-1,但是对于%和字母数字而言用ISO-8859-1和UTF-8解码出来的是一样的,此时就回到了汉字被编码过一次的字符串了,当再次进行解码的时候使用UTF-8就回将它转会汉字。

分享到:
评论

相关推荐

    python decode()和encode()函数详解

    decode()方法语法: str.decode(encoding=‘UTF-8’,errors=‘strict’) 参数: encoding – 要使用的编码,如”UTF-8″。 errors – 设置不同错误的处理方案。默认为 ‘strict’,意为编码错误引起一个UnicodeError。...

    EnCode/DeCode转换工具

    EnCode/DeCode转换工具是一款专门针对这一需求设计的小巧实用软件,它能够处理ANSI和UTF-8这两种常见的字符编码格式,帮助开发者解决字符转换的问题。 首先,我们要理解编码与解码的基本概念。编码是将可读的文本...

    decode & encode PNG files

    本文将围绕“decode & encode PNG files”这一主题,详细讲解PNG文件的解码与编码过程,以及相关资源的使用。 首先,让我们了解一下PNG文件的基本结构。PNG文件采用了一种称为LZ77的无损数据压缩算法,同时包含了一...

    从RNN到Attention到Transformer系列:Encode-Decode(Seq2Seq)代码实现

    ​ 介绍从RNN到Attention到Transformer系列中Decode-Encode(Seq2Seq) https://blog.csdn.net/qq_39707285/article/details/124726403

    JPG decode & encode - J2ME

    在移动设备上,Java 2 Micro Edition (J2ME) 是一种常见的开发平台,用于创建轻量级...以上是对"JPG decode & encode - J2ME"主题的详细解释,涵盖了J2ME环境下的JPEG图像处理、解码与编码的基本概念和可能的实现方式。

    Video Encode and Decode GPU Support Matrix.xlsx

    Video Encode and Decode GPU Support Matrix.xlsx

    PDF417 encode decode

    this program is a demo to encode, decode for PDF417 bar code.

    PHP json_encode() 和 json_decode()

    在给定的“demo”文件中,可能包含一些示例代码或者示例数据,这些可以帮助你更好地理解和应用`json_encode()`和`json_decode()`。为了深入学习,你可以打开这个文件,看看它是如何使用这两个函数的,或者尝试编写...

    详解Python解决抓取内容乱码问题(decode和encode解码)

    本文将详细介绍如何利用Python中的`decode`和`encode`方法来解决这个问题。 一、乱码问题描述 在进行网页抓取时,如果抓取到的数据(通常是HTML或XML文本)是用特定的字符编码(如GBK、GB2312或ISO-8859-1等)表示...

    JS 版本的base64函数实现(base64encode,base64decode)

    用js实现的base64encode,base64decode函数. 包括: function base64encode(str) { function base64decode(str) { function utf16to8(str) { function utf8to16(str) { function doit() {

    sbc_encode_decode.7z

    标题“sbc_encode_decode.7z”提示我们这是一个与SBC编码和解码相关的压缩文件,主要用于蓝牙A2DP协议。在IT领域,尤其是无线音频传输中,SBC(Subband Coding)是一种广泛使用的编解码标准。让我们深入探讨一下这个...

    EncodeDecode & ANSI-UTF8编码转换工具

    "EncodeDecode & ANSI-UTF8编码转换工具"是一款专门用于解决这个问题的软件,它能够帮助用户将文本数据从ANSI编码转换为UTF-8编码,反之亦然。这两种编码方式在不同的上下文中有各自的适用性,理解它们的差异和用途...

    HideText(decode/encode)_Into_Bitmap

    标题“HideText(decode/encode)_Into_Bitmap”暗示了这个压缩包可能包含了一组用于在位图(Bitmap)中隐藏文本(encode)和提取文本(decode)的源代码及可执行程序。这类技术通常被称为隐写术(Steganography),它...

    live555+ffmpegdecode+x264encode

    这里我们关注的是一个具体的实现方案——"live555+ffmpegdecode+x264encode",它涉及到了三个核心组件:live555、ffmpeg以及x264,它们分别在实时流接收、视频解码和编码环节中扮演关键角色。 1. live555:这是一个...

    HDB3 ENCODE AND DECODE

    HDB3 ENCODE AND DECODE,详细设计与实现,参考一下下啊

    RS_encode_decode

    本项目聚焦于“RS_encode_decode”,这是一个基于FPGA(Field-Programmable Gate Array,现场可编程门阵列)的编解码模块,特别应用了喷泉码中的Raptor码,其预编码部分采用了RS码(Reed-Solomon码)。让我们深入...

    imx6 vpu encode decode display

    嵌入式vpu, 编码、解码等相关代码.

    js-protobuf-encode-decode-master.zip

    本项目"js-protobuf-encode-decode-master.zip"提供了一个在线工具,专门用于处理JavaScript环境下的Protobuf编码和解码操作。 Protobuf是一种由Google开发的数据序列化协议,它定义了一种二进制数据格式,比JSON...

    Turbo encode and decode

    Turbo编码和解码是无线通信领域中的关键技术,特别是在LTE(Long Term Evolution)系统中,它对数据传输的高效性和可靠性起着至关重要的作用。本文将深入探讨Turbo编码的工作原理、编码过程、解码策略以及在LTE系统...

Global site tag (gtag.js) - Google Analytics