UTF8 编码解析/解码(附加代码) .
来源:互联网 发布:域名dns解析 编辑:程序博客网 时间:2024/06/05 03:29
本文转载自 http://blog.csdn.net/caoxinst/article/details/7833814 希望他允许我转载他的文章
最近在用cocos2d -x 做一个带滑动条的TextField(完成之后会公布出来)!!顺便了解了一下UTF8的编码格式!!
UTF8编码格式!一定要了解!
它其实和Unicode是同类,就是在编码方式上不同!
首先UTF8编码后的大小是不一定,不像Unicode编码后的大小是一样的!
我们先来看Unicode的编码:一个英文字母和 一个汉字 在编码后都是占用的空间大小是一样的,都是两个字节!而UTF8编码:一个英文字母 和 一个汉字,编码后占用的空间大小就不样了,前者是一个字节,后者是三个字节!
因为一个字母还有一些键盘上的符号加起来只用二进制七位就可以表示出来,而一个字节就是八位,所以UTF8就用一个字节来表式字母和一些键盘上的符号。然而当我们拿到被编码后的一个字节后怎么知道它的组成?它有可能是英文字母的一个字节,也有可能是汉字的三个字节中的一个字节!所以,UTF8是有标志位 的!
当要表示的内容是 7位 的时候就用一个字节:0******* 第一个0为标志位,剩下的空间正好可以表示ASCII 0-127 的内容。当要表示的内容在 8 到 11 位的时候就用两个字节:110***** 10****** 第一个字节的110和第二个字节的10为标志位。当要表示的内容在 12 到 16 位的时候就用三个字节:1110***** 10****** 10****** 和上面一样,第一个字节的1110和第二、三个字节的10都是标志位,剩下的空间正好可以表示汉字。
以此类推:
四个字节:11110**** 10****** 10****** 10******
五个字节:111110*** 10****** 10****** 10****** 10******
六个字节:1111110** 10****** 10****** 10****** 10****** 10******
............................................
..............................................
明白了没有?
编码的方法是从低位到高位
现在就让我们来看看实例吧!
黄色为标志位
其它着色为了显示其,编码后的位置
Unicode十六进制
Unicode二进制
UTF8二进制
UTF8十六进制
UTF8字节数
B
00001011
00001010
B
1
9D
00010011101
11000010 10011101
C2 9D
2
A89E
10101000 10011110
11101010 10100010 10011110
EA A2 9E
3
UTF8 字符串解析!!代码如下:
void parseUTF8(string sin,std::list<string> &msgList){ int l = sin.length(); for(int p = 0; p < l; ) { int size,; unsigned char c = sin[p]; if(c < 0x80) { size = 1;//占一个字节 } else if(c < 0xc2) { } else if(c < 0xe0) { size = 2;//占2个字节 } else if(c < 0xf0) { size = 3; } else if(c < 0xf8) { size = 4; } else if (c < 0xfc) { size = 5; } else if (c < 0xfe) { size = 6; } string temp = ""; temp = sin.substr(p, size); msgList.push_back(temp); p += size;}}
- UTF8 编码解析/解码(附加代码)
- UTF8 编码解析/解码(附加代码) .
- 字符串编码与解码函数(UTF8)
- UTF8编码解码函数
- UTF8的编码解码
- Delphi utf8编码的解码
- ios utf8编码和解码
- UTF8 - UNICODE编码解析(转载)
- 手机编码解码解析
- 编码解码代码
- 简单 utf8 编码、解码,可用来对数据进行加密
- Java中的字符编码与解码 utf8 utf16 gbk
- Python 有关unicode,gbk,cp2312,utf8的解码和编码
- 打开别人的文件,出现“无法用utf8编码解码”
- JavaScript Base64编码解码代码
- BASE64编码解码快代码
- Android Multimedia实战(五)MediaCodec编码解码实例解析
- 24. Dubbo原理解析-编码解码之编码解码流程
- hdu2516取石子
- 微软企业库4.1学习笔记(八)创建对象 续集2
- HDU 3278 Puzzle
- 关于C++复杂性的零碎思考
- POJ1001Exponentiation Java高精
- UTF8 编码解析/解码(附加代码) .
- 微软企业库4.1学习笔记(九)企业库程序集的部署
- 根据safmq线程类,模仿编写的线程基类
- 标准Linux文件系统层次标准(Filesystem Hierarchy Standard)/var篇
- NET深入学习笔记(4):深拷贝与浅拷贝(Deep Copy and Shallow Copy)
- Java替代C语言的可能性
- 微软企业库4.1学习笔记(十)企业库的设计
- 多媒体播放器 Amarok
- 微软企业库4.1学习笔记(十一)企业库的核心类