`
hhyyllgg
  • 浏览: 28338 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

编码理解

    博客分类:
  • java
 
阅读更多
我们都知道常见的编码有iso8859-1,GB2312/GBK , unicode,utf。
  • 1 iso8859-1 单字节,应用于英文系列,最多能表示的字符范围是0-255
  • 2 GB2312/GBK 汉子的国标码,专门用来表示汉字,是双字节编码,英文编码与iso8859-    1一样。 gbk兼容gb2312。
  • 3 unicode 这是最统一的编码,可以用来表示所有语言的字符,而且是定长双字节(也有四字节的)  编码,包括英文字母在内。所以可以说它是不兼容iso8859-1编码的,也不兼容任何   编码。不过,相对于iso8859-1编码来说,uniocode编码只是在前面增加了一个0字   节,比如字母'a'为"00 61"。 java内部就是使用unicode编码
  • 4 utf  考虑到unicode编码不兼容iso8859-1编码,而且容易占用更多的空间:因为对于英文字母,unicode也需要两个字节来表示。所以 unicode不便于传输和存储。因此而产生了utf编码,utf编码兼容iso8859-1编码,同时也可以用来表示所有语言的字符,不过,utf编码是不定长编码,每一个字符的长度从1-6个字节不等。另外,utf编码自带简单的校验功能。一般来讲,英文字母都是用一个字节表示,而汉字使用三个字节



  • 常见从b==》s请求过程中 如果提交的表单的form中指定了字符集的编码 则使用该编码,否则使用页面编码提交。如果直接在url中输入?后的参数 字符集编码为操作系统的编码
  • webServer获取的字节流默认以iso8859-1处理,所以一般情况下我们都是以过滤器设置服务器处理编码(request. setCharacterEncoding ())
  • 当系统输出字符的时候,会按指定编码输出,中文windows下,对于response(浏览器),则使用 jsp文件头指定的contentType,或者可以直接为response指定编码。同时,会告诉browser网页的编码。如果未指定,则会使用 iso8859-1编码。对于中文,应该为browser指定输出字符串的编码。
  •   浏览器显示网页时,首先使用response中指定的编码(jsp文件头指定的contentType最终也反映在response上),如果未指定,则会使用网页中meta项指定中的contentType



对于jsp文件
  •   1 :<%@page pageEncoding="GBK"%>指的是编译时的编码,请求时字符集以这个为准
  •   2 :<%@ page contentType="text/html; charset= GBK" %>指的是页面显示时的代码 和response.setCharacterEncoding("GBK")等效。
  •   3 :对与静态网页 则使用meta来指定编码 ,对于jsp页面以页头优先
对于url编码
  对于中文IE,如果在高级选项中取消总以UTF-8发送,则PathInfo和QueryString是URL encode按照GBK编码(其它如ff也是这种方式)。
  北京.html?a=北京

实际上提交是
GET %B1%B1%BE%A9?a=%B1%B1%BE%A9


如果选择是以UTF-8发送 则PathInfo使用的是utf-8编码 而QueryString使用的是gbk的编码
上一个实际提交的是
 GET %E5%8C%97%E4%BA%AC?a=%B1%B1%BE%A9


所以,由于客户端设置的不同,相同的链接,在服务器上得到了不同结果。这个问题不少人都遇到,却没有很好的解决办法。所以有的网站会建议用户尝试关闭 UTF-8选项。不过,有一个解决办法就只能是让自己的程序多一点智能:根据内容来分析编码。

比方说:

   if(uri.toUpperCase().startsWith("/%E5%8C%97%E4%BA%AC")){//北京的utf8编码
         //中文url,采用的是UTF-8编码
         cnuri = java.net.URLDecoder.decode(uri,"UTF-8");
        }
    if(uri.toUpperCase().startsWith("/%B1%B1%BE%A9")){//北京的gbk编码
         //中文url,采用的是UTF-8编码
         cnuri = java.net.URLDecoder.decode(uri,"GBK");
        } 
  if(uri.matches(".*(%u[\\w]{4}).*")){
         cnuri=uri.replace("%u", "\\u");
         cnuri =StringUtils.loadConvert(cnuri);
         //System.out.println("中文网址:"+cnuri+",需要转码");
        }
  
分享到:
评论

相关推荐

    易语言unicode编码到GBK

    1. 字符编码理解:首先,我们需要了解Unicode和GBK编码的基本原理。Unicode使用多字节表示每个字符,其中UTF-16是最常见的Unicode实现,每个字符由2或4个字节表示。GBK则使用1或2字节表示字符,主要用于存储中文字符...

    Silverlight支持GB2312中文编码

    1. **字符编码理解**:首先,理解不同的字符编码是至关重要的。GB2312是1970年代制定的一种中文字符编码,包含6763个常用汉字,而UTF-8是目前互联网上最常用的多语言编码,能够表示几乎所有的Unicode字符。两种编码...

    易语言HTML编码转换源码

    1. 字符编码理解:在HTML中,字符可以以实体形式(如`&amp;`代表`&`)或字节序列(如UTF-8、GBK等)存在。转换过程首先需要理解这些编码方式,并能够正确解析和转换它们。例如,从HTML实体转为Unicode,需要识别并...

    字符编码的理解

    标题“字符编码的理解”涉及到的是计算机领域中关于信息表示的基础知识,特别是字符集与编码方式。字符编码是计算机处理文本时的关键环节,它允许我们用二进制数据来表示各种字符,包括汉字、英文、数字以及其他语言...

    易语言JS实现编码转换源码.7z

    1. **字符编码理解**:首先,你需要了解各种编码格式的特点,如ASCII的7位编码,GBK的双字节编码,以及UTF-8的变长编码机制。 2. **易语言编程基础**:易语言的语法结构,基本数据类型,流程控制(如循环、条件判断...

    2022年浙江省赛编码信息获取.pdf

    在2022年浙江省赛B模块中,编码信息获取是一项重要的技能,尤其在中职网络安全竞赛中,参赛者需要具备扎实的编码理解和解码能力来解决复杂的安全问题。这份“2022年浙江省赛编码信息获取帮助文档”为参赛者提供了...

    易语言源码易语言uXXXX型编码解码源码.rar

    3. **字符编码理解**:源码可能涉及了对Unicode编码的理解,包括Unicode的多字节表示(如UTF-16)和字节顺序标记(BOM)的概念。 4. **内存操作**:由于Unicode字符可能占用多个字节,源码可能涉及到内存的直接操作...

    编码的奥秘(更好的理解计算机)

    《编码的奥秘:更好的理解计算机》一书深入浅出地揭示了计算机世界中的编码原理,帮助我们更全面地理解这个数字时代的核心。编码在计算机科学中起着至关重要的作用,它不仅仅是数字和字符的转换,更是信息传输、存储...

    台达编码器手册.rar_台达 编码器_台达编码器_台达编码器手册_增量式编码器_绝对值编码器

    总之,《台达编码器手册》是工程师、技术人员和设备维护人员不可或缺的工具,通过深入学习和理解其中的内容,可以提升对编码器技术的理解,更有效地应用在实际工作中,提高自动化系统的性能和可靠性。

    霍夫曼编码仿真实验_编码_霍夫曼编码_matlab_

    在MATLAB环境下实现霍夫曼编码,不仅可以加深对这一算法的理解,还可以通过实验来直观地观察编码效率和压缩效果。 霍夫曼编码的基本原理是:频繁出现的字符用较短的编码,不常出现的字符用较长的编码,这样可以使得...

    gbk.rar_GBK_GBK Unicode_unicode gbk_unicode gbk

    1. 字符编码理解:首先,开发者需要理解各种编码的原理,如GBK是双字节编码,每个字符占用2个字节,而Unicode(通常是UTF-8)的字符可能占1到4个字节不等。 2. 编码转换函数:在C语言中,可以使用`iconv`库进行编码...

    信息论编码:霍夫曼编码、费诺编码、游程编码、算数编码的C++实现

    本项目重点探讨了四种重要的编码方法——霍夫曼编码、费诺编码、游程编码和算数编码,并提供了C++实现,旨在帮助理解和应用这些编码技术。以下是对这些编码方式的详细说明: 1. 霍夫曼编码: 霍夫曼编码是一种变...

    怎么理解编码器的“精度”

    总结来说,理解编码器的“精度”涉及对其刻线均匀性和制作工艺的评价,它直接影响到编码器输出信号的一致性和准确性。而解析度和分辨率是独立的概念,前者关乎编码器每圈的脉冲数,后者则关联到编码器检测角度的能力...

    编码的奥秘 计算机理解

    《编码的奥秘:计算机理解》是一份关于计算机科学中编码技术的综合资料,虽然提供的不是完整版,但其中包含的章节已经足以帮助我们深入理解计算机如何解析和处理信息。通过对压缩包内的文件名分析,我们可以推测这...

    matlab开发-理解相位编码器

    在MATLAB环境下,理解相位编码器的原理和开发方法对于进行相关项目的模拟和设计至关重要。本篇文章将深入探讨相位编码器的工作原理以及如何在MATLAB中实现相关模型。 首先,相位编码器主要通过检测电机轴的旋转角度...

    行程编码,JPEG压缩编码基本系统_jpeg压缩编码_Vc_图像压缩_

    本文将深入探讨标题中的“行程编码”以及JPEG压缩编码的基本系统,并结合Vc(可能是Visual C++的简写)的编程角度来理解这些概念。 首先,我们来看“行程编码”。行程编码是一种针对图像数据的无损压缩方法,特别...

    gbk.rar_GBK_gbk 判断汉字

    1. **GBK编码理解**:理解GBK编码的结构,包括其字节范围、编码规则以及如何从字节序列还原出汉字。 2. **字节流解析**:程序需要读取字节流,并根据GBK编码规则判断每个双字节序列是否代表一个合法的GBK编码的汉字...

    信息论与编码实验 霍夫曼编码

    这个过程中,你不仅可以理解霍夫曼编码的工作原理,还能锻炼编程技能,加深对数据压缩的理解。 最后,提到的“Huffman”可能是实验提供的源代码文件或者实验报告模板,它包含了实现霍夫曼编码的具体步骤和示例,供...

    利用深度去噪自编码器深度学习的指令意图理解方法.pdf

    在这篇论文中,作者提出了利用深度去噪自编码器(SDAE)来学习指令的高阶特征,并使用高斯核支持向量机来实现指令的意图理解。 深度去噪自编码器(SDAE)是一种深度学习算法,通过使用自编码器来学习数据的高阶特征...

    易语言字符编码转换

    通过深入研究和理解这个易语言字符编码转换源码,开发者不仅可以掌握字符编码的基本概念,还能学习到易语言的具体应用技巧,这对于开发涉及跨平台文本处理或需要与不同编码系统交互的项目非常有帮助。同时,这也是一...

Global site tag (gtag.js) - Google Analytics