编码
来源:互联网 发布:全球贸易预警数据库 编辑:程序博客网 时间:2024/06/10 11:34
1 简单概念
编码:信息从一种形式或格式转换为另一种形式或格式的过程。就是将我们看到的文字,图片等信息按照某种规则存储在计算机中。
解码:编码的逆过程,将存储在计算机上的二进制转换为我们看到的文子,图片。
字符:一个字符是一个单位的字形、类字形单位或符号的基本信息。字符是指计算机中使用的字母、数字、字和符号。
字符集:多个字符的集合,常见字符集有,ASCII,Unicode
是把字符集中的字符编码为指定集合中某一对象(例如:比特模式、自然数序列、8位组或者电脉冲),以便文本在计算机中存储和通过通信网络的传递
Unicode又称为统一码、万国码、单一码,它是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。
一个字符的Unicode编码是确定的,但是在实际传输过程中,由于不同系统平台的设计不一定一致,以及出于节省空间的目的,对Unicode编码的实现方式有所不同。Unicode的实现方式称为Unicode转换格式(Unicode Transformation Format,简称为UTF),有UTF-8、UTF-16、UTF-32三种实现方式
UCS(Universal Character Set,通用字符集),是由ISO制定的ISO 10646(或称ISO/IEC 10646)标准所定义的标准字符集。UCS不仅给每个字符分配一个代码,而且赋予了一个正式的名字。表示一个UCS或Unicode值的十六进制数通常在前面加上“U+”,例如“U+0041”代表字符“A”
Unicode规范中定义,每一个文件的最前面分别加入一个表示编码顺序的字符,这个字符的名字叫做”零宽度非换行空格”(ZERO WIDTH NO-BREAK SPACE),用FEFF表示。这正好是两个字节,而且FF比FE大1。
如果一个文本文件的头两个字节是FE FF,就表示该文件采用大头方式;如果头两个字节是FF FE,就表示该文件采用小头方式
UTF-8使用一到四个字节为每个字符编码,编码规则如下:
1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。
2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。
Unicode
UTF-8
0000 ~007F
0XXX XXXX
0080 ~07FF
110X XXXX 10XX XXXX
0800 ~FFFF
1110XXXX 10XX XXXX 10XX XXXX
1 0000 ~1F FFFF
1111 0XXX 10XX XXXX 10XX XXXX10XX XXXX
20 0000 ~3FF FFFF
1111 10XX 10XX XXXX 10XX XXXX10XX XXXX 10XX XXXX
400 0000 ~7FFF FFFF
1111 110X 10XX XXXX 10XX XXXX10XX XXXX 10XX XXXX 10XX XXXX
已知”严”的unicode是4E25(100111000100101),根据上表,可以发现4E25处在第三行的范围内(0000 0800-0000 FFFF),因此”严”的UTF-8编码需要三个字节,即格式是”1110xxxx 10xxxxxx 10xxxxxx”。然后,从”严”的最后一个二进制位开始,依次从后向前填入格式中的x,多出的位补0。这样就得到了,”严”的UTF-8编码是”11100100 10111000 10100101″,转换成十六进制就是E4B8A5。Javaweb解决乱码问题
Get方式
Serlvet:
url地址后的参数服务器默认用ISO-8859-1进行编码
结论:乱码
解决办法:request.setCharacterEncoding("UTF-8");结果:无效
String name = reuqest.getParameter("name");
拿到原始的二进制数据,用UTF-8进行重新编码
byte b[] = name.getBytes("ISO-8859-1");//1010101
String name = new String(b,"UTF-8");//解决
<Connector URIEncoding="UTF-8" useBodyEncodingForURI="true"/>
Serlvet:
由于客户端没有告诉服务器,请求正文的编码,于是服务器默认用ISO-8859-1进行编码
结论:乱码
解决办法:告诉服务器请求正文的数据应该使用的编码是什么?UTF-8
request.setCharacterEncoding("UTF-8");
- 编码
- 编码
- 编码
- 编码
- 编码
- 编码
- 编码
- 编码
- 编码
- 编码
- 编码
- 编码
- 编码
- 编码
- 编码
- 编码
- 编码
- 编码
- 3d模型任意切割的思路(续)
- 使 Oracle 索引失效的七大限制条件
- 3.4—字符串—Add Binary
- js知识总结思维导图
- 浅谈工程师的调试法宝(二)---半主机的巧妙应用
- 编码
- kotlin Android中 findViewById()不能推导类型的错误
- Intellij IDEA的常用设置
- Android Coding 利器 之 掌握小技巧
- 1107. Social Clusters (30)并查集
- composer安装laravel
- 什么是BIM
- 回应『Angular有哪些地方比Vue更优秀?』
- 132 Pattern