unicode编码原理及问题
历史
在1963年,计算机的使用尚不广泛,那时使用的是7-bit的ASCII码,范围为0-127作为字符的编码,只支持少部分的字符,但是随着计算机的普及,不同的国家地区开始自己制造自己的编码规范,这导致了互相不兼容,成为一个问题。
为了解决问题,ISO开始尝试制定包含大部分字母和符号的编码,为UCS也就是unicode编码。
unicode编码
unicode实际上是一个字符与数字之间的映射关系表,并没有实际的编码方案,因此制定了UTF标准,包括UTF-8,UTF-16,UTF-32等,Unicode是一个设计图,而UTF为理论的实现。
Code point 与 code unit
Code point是unicode标准里字符的编号,目前unicode使用0~0x10FFFF编码范围,通过U+xxxx表示某个字符。
Code unit是unicode编码里一个code point需要的最少字节数,UTF-8至少需要一个字节,UTF-16,UCS-2至少需要2个字节,UCS-4,UTF-32为四个字节,后面三个为定长编码。
问题
由于包含了众多的编码,容易造成各种各样的问题:
视觉欺骗
有的字符看起来非常相似,这导致了视觉上的问题,例如аррӏе.com(ӏ为U+04CF)与apple.com,为了解决这一问题chrom使用punycode域名编码,即对域名进行编码,以xn--开头,例如аррӏе.com,chrom检测到可能有视觉欺骗情况时,对其编码为xn--80ak6aa92e.com(只会对知名网站视觉欺骗转换),firefox并没有此功能。(python的idna库便是实现此功能的库)
然而punycode也存在视觉欺骗例如:䕮䕵䕶䕱.com编码为xn--google.com
双向显示
由于阿拉伯和希伯来语是从右往左读,加入unicode控制字符后可能存在问题,例如txt.exe变为exe.txt
数字显示
孟加拉语0-9为০ ১ ২ ৩ ৪ ৫ ৬ ৭ ৮ ৯ 这里的৪(U+09EA)实际上为4
等价形式
在WAF类处理时,会注意到一些等价意义的字符并进行过滤,例如LocalHost等同于localhost,但是另外还有ⓛocaⓛhost也等同,这种情况容易忽略
字符删除
在\x3c\x73\x63\x72\xc2\x69\x70\x74\x3e字符串中,\xc2不是一个有效的字串,在一些逻辑处理中可能会删除,这可能导致为题
字符替换
在一些情况下,U+FFFF会被替换成?,这会导致问题
缓冲区溢出
在进行大小写转换时,可能字符会变多,例如'ß'.toUpperCase()会变成SS,如果长度检查在大小写转换之前,就可能存在缓冲区溢出问题。
unicode编码原理及问题的更多相关文章
- paip.utf-8,unicode编码的本质输出unicode文件原理 python
paip.utf-8,unicode编码的本质输出unicode文件原理 python #别的语言,java php都是unicode,走十python不一样. #enddef #t ...
- java编码原理,java编码和解码问题
java的编码方式原理 java的JVM的缺省编码方式由系统的“本地语言环境”设置确定,和操作系统的类型无关 . 在JAVA源文件-->JAVAC-->Class-->Java--& ...
- JS操作Unicode编码的emoji表情显示在页面
前言:项目中用到了emoji表情,后端传递数据时直接是以Unicode形式,在页面总是无法展示,找尽各种方法总算是试出了一种,虽然达到效果但是并不是特别理解其中的原理并且无比笨拙,贴在这用作笔记,如果 ...
- Base64编码原理与应用
本文内容转自网络,如需详细内容,请参考相关网址. http://my.oschina.net/goal/blog/201032 代码参考:http://blog.csdn.net/prsniper/a ...
- BASE64编码原理分析脚本实现及逆向案例
在互联网中的每一刻,你可能都在享受着Base64带来的便捷,但对于Base64的基础原理你又了解多少?今天小编带大家了解一下Base64编码原理分析脚本实现及逆向案例的相关内容. 01编码由来 数 ...
- 字符串编码原理--PHP数组原理与高级应用
基础知识 1.有几种表达方式(查看手册)2.单引号和双引号的区别,双引号解析变量.\n,\t等,八进制与十六进制编码 内部存储方式 c语言中怎么表示字符串,结构体存储了字符指针和长度1.字符串可以用[ ...
- 小伙子又乱码了吧-Java字符编码原理总结
前提 配合前面阅读的I/O和NIO的资料,现在总结一下关于字符集和乱码问题的原理和解决方案.参考资料: 码表ASCII Unicode GBK UTF-8 字符编码笔记ASCII,Unicode和UT ...
- Jmeter查看结果树Unicode编码转中文方法
本文为转载微信公众号文章,如作者发现后不愿意,请联系我进行删除 在jmeter工具的使用中,不管是测试接口还是调试性能时,查看结果树必不可少,然而在查看响应数据时,其中的中文经常以Unicode的编码 ...
- 转发:吐血总结,彻底明白 python3 编码原理
吐血总结,彻底明白 python3 编码原理 写的不错,转发学习一下,侵删.. 原文地址https://zhuanlan.zhihu.com/p/40834093 防止原文看不到了 这里粘贴复制一下: ...
随机推荐
- 利用ImageAI库只需几行python代码超简实现目标检测
目录 什么是目标检测 目标检测算法 Two Stages One Stage python实现 依赖 安装 使用 附录 什么是目标检测 目标检测关注图像中特定的物体目标,需要同时解决解决定位(loca ...
- html的一些基本属性介绍
一.html的属性类型: 1.常见标签属性: a.<h1>:align对其方式 例如:<h1 align="right"> hhhhh</ ...
- Java基础的一些知识点(一):接口interface
1.接口的含义 接口可以理解成统一的协议, 而接口中的属性也属于协议中的内容.但是接口的属性都是公共的,静态的,最终的. 接口的成员特点: 1.成员变量只能是常量,默认修饰符 public stati ...
- TI MSP430工程配置及2019年电赛A题编程示例(使用430 F5529)
配置 第一步:右击工程,选择Options 第二步:在General Options的Target选项卡里选择对应的器件Device,这里是MSP430G2231 第三步:在Debugger里选择FE ...
- Netty学习(七)-Netty编解码技术以及ProtoBuf和Thrift的介绍
在前几节我们学习过处理粘包和拆包的问题,用到了Netty提供的几个解码器对不同情况的问题进行处理.功能很是强大.我们有没有去想这么强大的功能是如何实现的呢?背后又用到了什么技术?这一节我们就来处理这个 ...
- node一键发布,并运行
作为一个前端开发人员如果你只会写一些业务代码,从程序员的角度来考虑已经可以了.但是从架构的角度来考虑那远远不够: 在此记录下成长中的经历: 想要达成的目的:运行一个脚本实现代码的打包,上传至服务器并部 ...
- JS鼠标吸粉特效
HTML <canvas id=canvas></canvas> CSS * { margin: 0; padding: 0; } html { overflow: hidde ...
- 常用maven 命令
重新依赖:mvn package -U -DskipTest=true; 在本地安装jar包:mvn install 清除产生的项目:mvn clean 运行测试:mvn test 上传到私服:mvn ...
- 洛谷 P1357 花园
题意简述 一个只含字母C和P的环形串 求长度为n且每m个连续字符不含有超过k个C的方案数 题解思路 由于\(m<=5\)所以很显然状压 但由于\(n<=10^{15}\).可以考虑用矩阵加 ...
- python2.7官方文档阅读笔记
官方地址:https://docs.python.org/2.7/tutorial/index.html 本笔记只记录本人不熟悉的知识点 The Python Tutorial Index 1 Whe ...