Unicode转换为UTF-8详解
2016-07-27 16:34
246 查看
Unicode转换为UTF-8详解
本文主要是记录Unicode如何转换为UTF-8,不涉及字符编码的历史、制定、版本等,如果想查询这方面的资料,请移步Google。UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。
1.UTF-8编码规则
2.Unicode符号范围与UTF-8二进制对应关系
3.案例分析
1.UTF-8编码规则
1.对于单字节的符号,字节的第一位设为0,后面7位为这个符号的Unicode二进制码。 因此对于英语字母,UTF-8编码和ASCII码是相同的。 2.对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。 剩下的没有提及的二进制位,全部为这个符号的Unicode二进制码。
2.Unicode符号范围与UTF-8二进制对应关系
Unicode符号范围 | UTF-8编码方式 (十六进制) | (二进制) ----------------------+--------------------------------------------- 0 <--> 0x7f | 0xxxxxxx 0x80 <--> 0x7FF | 110xxxxx 10xxxxxx 0x800 <--> 0xFFFF | 1110xxxx 10xxxxxx 10xxxxxx 0x10000 <--> 0x10FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
3.案例分析
(一)汉字“你”从Unicode转换为UTF-8:
1.将汉字 “你”转换为对应的Unicode编码你 -->\u4f60
2.将对应的Unicode码转换为二进制
\u4f60 --> 0100 1111 0110 0000
3.确定Unicode符号范围
0x4f60处于第三级,应此“你”这个汉字有三个字节长度。
4.Unicode转换为UTF-8
从最后一个二进制位开始,将Unicode的二进制依次从后向前填入格式中的x,多出的位补0 1110 (0100) 10(11 1101) 10(10 0000) 所以转换后的汉字“你”的UTF-8格式的二进制为: 1110 0100 1011 1101 1010 0000 此二进制对应的十六进制为:0xE4BDA0
(二)汉字“好”从Unicode转换为UTF-8:
1.将汉字 “好”转换为对应的Unicode编码好 -->\u597d
2.将对应的Unicode码转换为二进制
\u597d --> 0101 1001 0111 1101
3.确定Unicode符号范围
0x597d处于第三级,应此"好"这个汉字有三个字节长度
4.Unicode转换为UTF-8
1110 (0101) 10(10 0101) 10(11 1101) 所以转换后的汉字“好”格式的二进制为: 1110 0101 1010 0101 1011 1101 此二进制对应的十六进制为:0xE5A5BD
(三)linux与windows下创建UTF-8文件对比
分别创建一个test.txt文件在linux和window下,输入汉字“你好”保存(此时不敲回车键)。分别查看这两个文件的十六进制形式:
在linux中: (vim打开文件,命令模式输入:%!xxd -g 1 查看十六进制;输入:%!xxd -r 恢复文本形式) e4 bd a0 e5 a5 bd 0a 在windows中:(UltraEdit打开切换为十六进制) ef bb bf e4 bd a0 e5 a5 bd 0a
可以看见在windows中多了ef bb bf 这utf-8的BOM标记
http://www.cnblogs.com/findumars/p/3620078.html [linux中为什么没有BOM标记?]
https://en.wikipedia.org/wiki/Byte_order_mark [关于BOM标记的更多信息]
如文中有错误的地方欢迎指正,我将不甚感激,谢谢!
欢迎关注我的Github账号:https://github.com/tuzhao
相关文章推荐
- Linux 与 Windows 对UNICODE 的处理方式
- Unicode详细分析解释
- vbs中将GB2312转Unicode的代码
- 将编码从GB2312转成UTF-8的方法汇总(从前台、程序、数据库)
- 程序员趣味读物 谈谈Unicode编码
- 常用字符集编码详解(ASCII GB2312 GBK GB18030 unicode UTF-8)
- C#实现Json转Unicode的方法
- UTF-8、Unicode 标准化表单、BOM
- ASP UTF-8页面乱码+GB2312转UTF-8 +生成UTF-8格式的文件(编码)第1/2页
- ASP+FSO生成的网页文件默认编码格式以及转换成UTF-8编码方法
- php中json_encode UTF-8中文乱码的更好解决方法
- 浅谈Unicode与JavaScript的发展史
- JavaScript中字符串与Unicode编码互相转换的实现方法
- php utf-8转unicode的函数第1/2页
- utf-8编码引起js输出中文乱码的解决办法
- Shell脚本把文件从GBK转为UTF-8编码
- jq的get传参数在utf-8中乱码问题的解决php版
- php UTF-8、Unicode和BOM问题
- wampserver 编码设置
- Unicode再探