我们都知道常见的编码有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+",需要转码");
}
分享到:
相关推荐
以手电筒为例,细致讲解了计算机的各种编码和常用的进制
Encoder用于对文本序列进行编码理解,Decoder则负责根据编码后的向量序列生成响应的文本输出。这种结构专门用于语言理解与生成任务,非常适合聊天场景。 2. 训练数据:ChatGPT使用海量的人机对话数据集进行训练,这使其...
NULL 博文链接:https://fatmind.iteye.com/blog/1772728
程序中是一个包含测试用例的霍夫曼编码程序,实现超简单,总共只有25行,其中矩阵m记录各阶段数据的排序结果以便于回溯,cell数组c用于记录各阶段数据的编码值,可帮助你加深对霍夫曼编码的理解。要你5个积分不多哈...
该文档只是csdn博客有地方需要使用,因csdn暂不支持上传附件所以个人上传附件所在上传至该出。若有朋友需要也可点击免费下载
matlab开发-理解相位编码器。建立了三相二极管整流器的数学模型。
利用深度去噪自编码器深度学习的指令意图理解方法.pdf
编码器测速程序,基于51单片机的测速程序,可以更好的理解编码器原理,以及测速算法
几篇文章,组合起来容易理解字符集及编码问题。
介绍了字符编码的常识及常见字符编码的介绍,及字符编码的深层原理
对于字符编码的认识与理解、防止与解决乱码问题 ,编码问题是信息处理的基本问题,但是由于历史和政治的问题,事实上存在着大量不统一的编码方式,造成在信息处理过程中的信息丢失,转换错误等问题,UCS 为问题的...
本文主要介绍了TCM编码技术的编码增益的分析方法。
文档中主要介绍了各类字符集以及相关的字符编码,字符的显示原理,从输入到显现的整个过程,程序中出现的乱码问题以及解决方案
通过编写利用哈夫曼算法实现的文件编码解码小工具,可加深对哈夫曼算法的理解,以及编码的熟练度。本人的小工具仅针对英文大小字母及 ' '\n' ' ' 字符针对性的进行了哈夫曼编码,若想实现中文及各种支持语言的编码,...
用通俗平实的语言对字符内码做了概述,适合刚接触相关知识的朋友阅读理解!
4)理解,总结香农编码算法。 费诺编码: 内容与设计思想 1)充分掌握信源编码方案之一的费诺编码算法设计; 2)以教材例题为算例,将该算法用代码实现; 3)以至少2组算例验证程序; 4)理解,总结费诺编码算法。
编码器的精度,指的是编码器工艺制作时是否精度高;下面一起来看看
游程编码与哈夫曼编码结合,可以直接运行。很好理解的代码。
大多数的编码都需要被很好地理解,因为它们是人类交流的基础。――《编码的奥秘》 手电筒、英国人入侵、黑色的猫和跷跷板与计算机有什么必然联系?本书向我们展示了使用语言的一些直观方法并创造新的方法来进行相互...
要学习计算机的基础知识,真正理解计算机的组成原理和工作过程往往是一件令人头痛的事,即使对计算机专业的学生来说,也并不轻松。 本书无疑将会成为你的好朋友。随着作者的思路,你将轻松自如地了解到计算机软件...