utf8编码转化为unicode的一个精彩函数
来源:互联网 发布:linux mysql root提权 编辑:程序博客网 时间:2024/05/16 11:54
UTF-8就是对unicode编码的一种实现, UTF-8的一个特别的好处是它与ISO-8859-1完全兼容。UTF-8就是以8位为单元对UCS进行编码。从UCS-2到UTF-8的编码方式如下:
UCS-2编码(16进制) UTF-8 字节流(二进制)
0000 - 007F 0xxxxxxx
0080 - 07FF 110xxxxx 10xxxxxx
0800 - FFFF 1110xxxx 10xxxxxx 10xxxxxx
//------------------------------------------------//
// function name: UCode
// input: const BYTE*& src
// function name: UCode
// input: const BYTE*& src
// output:
// return: WORD
// return: WORD
// 0 -- 返回0的情形:1)是个ascii字符,且已经读到字符串尾了;2)它是个utf8多字节编码的,但里面的字符里的字节是非法的,//无效的。3)是它没涉及到的,即可能是用超过3byte编码的字符串,没处理过,可能会出现0。
// word--返回unicode的编码
// description: 获取编码,输入的utf8编码的第一个字节指针,输出为它的2byte unicode编码
//------------------------------------------------//
// word--返回unicode的编码
// description: 获取编码,输入的utf8编码的第一个字节指针,输出为它的2byte unicode编码
//------------------------------------------------//
inline WORD UCode(const BYTE*& src)
...{
WORD ucode;
if (src[0] < 0x80) // is ascii
...{
return *src ? *src++ : 0; //0 means: it’s the string’s end
}
if (src[0] < 0xE0) // process utf8 use 2 char., 0xE0=111xxxxx
...{
if (src[1] && (src[0] & 0x1F)) // make sure src[0],src[1] is effect char
...{ //0x1F=00011111(5个1), 0x3F=00111111(6个1)
ucode = ((src[0] & 0x1F) << 6) | (src[1] & 0x3F);
//if (0x80)unicode=(11000100
src += 2;
}
else
...{
src++;
return 0; //0 means: it isn’t an effect dwcs
}
}
else //use utf8 more then 2bytes
...{
if (src[1] && (src[0] & 0xF)) //utf8 use 3 char
...{
if (src[2] && (src[1] & 0x3F))
...{
ucode = ((src[0] & 0xF) << 12) | ((src[1] & 0x3F) << 6) | (src[2] & 0x3F);
src += 3;
}
else
...{
src += 2;
return 0; //no effect char
}
}
else
...{
src++;
return 0; //no effect char
}
} //if char use morethen 3 char, how to do it?
return ucode;
}
...{
WORD ucode;
if (src[0] < 0x80) // is ascii
...{
return *src ? *src++ : 0; //0 means: it’s the string’s end
}
if (src[0] < 0xE0) // process utf8 use 2 char., 0xE0=111xxxxx
...{
if (src[1] && (src[0] & 0x1F)) // make sure src[0],src[1] is effect char
...{ //0x1F=00011111(5个1), 0x3F=00111111(6个1)
ucode = ((src[0] & 0x1F) << 6) | (src[1] & 0x3F);
//if (0x80)unicode=(11000100
src += 2;
}
else
...{
src++;
return 0; //0 means: it isn’t an effect dwcs
}
}
else //use utf8 more then 2bytes
...{
if (src[1] && (src[0] & 0xF)) //utf8 use 3 char
...{
if (src[2] && (src[1] & 0x3F))
...{
ucode = ((src[0] & 0xF) << 12) | ((src[1] & 0x3F) << 6) | (src[2] & 0x3F);
src += 3;
}
else
...{
src += 2;
return 0; //no effect char
}
}
else
...{
src++;
return 0; //no effect char
}
} //if char use morethen 3 char, how to do it?
return ucode;
}
示例:
例如“汉”字的Unicode编码是6C49。6C49在0800-FFFF之间,所以肯定要用3字节模板了:
1110xxxx 10xxxxxx 10xxxxxx。
将6C49写成二进制是:0110 110001 001001, 用这个比特流依次代替模板中的x,得到:11100110 10110001 10001001,即E6 B1 89。
- utf8编码转化为unicode的一个精彩函数
- VC Unicode编码转换为UTF8编码的函数
- ANSI、Unicode、UTF8相互转化的函数
- Unicode编码相关的一个标准----UTF8
- base64-utf8编码的NSString转化为NSString
- 字符串转化为unicode编码
- 将一个包含ASCII编码Unicode编码字符的Byte数组转化为一个完整的String
- 一个比较方便的转换NSString为UTF8编码的函数
- 一个比较方便的转换NSString为UTF8编码的函数
- 一个比较方便的转换NSString为UTF8编码的函数
- 一个比较方便的转换NSString为UTF8编码的函数
- GB2312和BIG5,Unicode/UTF8等编码之间的互相转化
- unicode to utf8 转化
- 将unicode编码转化为汉字输出
- 如何把字符串转化为unicode编码
- 将普通字符串转化为Unicode编码
- 将汉字转化为unicode编码
- java把字符串转化为unicode编码
- 开源日志系统 - log4cplus (七)
- 感动一瞬间
- uml基础知识温故而知新
- QA Review - A Risky Project
- Struts web.xml中常见配置
- utf8编码转化为unicode的一个精彩函数
- JAVA写的文件分割与文件合并程序
- JSP分页技术
- firefox 怎么了?
- 买票回家啦
- DriverStudio工具包介绍
- 使用XMLBean时JVM异常问题的解决
- 卸载过期卡巴后进不了Win XP,装瑞星配置又出错
- DriverStudio 开发USB驱动程序