- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
UTF-8到Unicode的编码转换
UTF-8就是Unicode Transformation Format-8,是Unicode的一种变换编码格式。
?
?
UTF-8?有以下特性:
?
UCS?字符?U+0000?到?U+007F (ASCII)?被编码为字节?0x00?到?0x7F (ASCII?兼容).?这意味着只包含?7?位?ASCII?字符的文件在?ASCII?和?UTF-8?两种编码方式下是一样的.
?
所有?U+007F?的?UCS?字符被编码为一个多个字节的串,?每个字节都有标记位集.?因此, ASCII?字节?(0x00-0x7F)?不可能作为任何其他字符的一部分.
?
表示非?ASCII?字符的多字节串的第一个字节总是在?0xC0?到?0xFD?的范围里,?并指出这个字符包含多少个字节.?多字节串的其余字节都在?0x80?到?0xBF?范围里.?这使得重新同步非常容易,?并使编码无国界,?且很少受丢失字节的影响.
?
可以编入所有可能的?231个?UCS?代码
?
UTF-8?编码字符理论上可以最多到?6?个字节长,?然而?16?位?BMP?字符最多只用到?3?字节长.
?
Bigendian UCS-4?字节串的排列顺序是预定的.
?
字节?0xFE?和?0xFF?在?UTF-8?编码中从未用到.
?
下列字节串用来表示一个字符.?用到哪个串取决于该字符在?Unicode?中的序号.
?
U- U-0000007F:
?
? 0xxxxxxx
?
? U- U-000007FF:
?
? 110xxxxx?10xxxxxx
?
? U- U-0000FFFF:
?
? 1110xxxx?10xxxxxx?10xxxxxx
?
? U- U-001FFFFF:
?
? 11110xxx?10xxxxxx?10xxxxxx?10xxxxxx
?
? U- U-03FFFFFF:
?
? 111110xx?10xxxxxx?10xxxxxx?10xxxxxx?10xxxxxx
?
? U- U-7FFFFFFF:
?
? 1111110x?10xxxxxx?10xxxxxx?10xxxxxx?10xxxxxx10xxxxxx
?
? 从上表还可以看出,UTF-8每个编码字符都不可能以“10”开头,“10”是以连接符的形式出现在后面的编码字节开头。因此UTF-8编码在存储和传输时是不容易出错的。
?
下面是UTF-8到Unicode的编码转换代码(J2ME环境下的实现):UTFC2UniC方法包含了编码转换逻辑。
?
/**
?
?????*?将UTF-8字节数据转化为Unicode字符串
?
?????* @param utf_data byte[] - UTF-8编码字节数组
?
?????* @param len int -?字节数组长度
?
?????* @return String -?变换后的Unicode编码字符串
?
?????*/
?
????public static String UTF2Uni(byte[] utf_data, int len)
????{
????????StringBuffer unis = new StringBuffer();
????????char unic = 0;
????????int ptr = 0;
????????int cntBits = 0;
????????for(;ptr len;)
????????{
????????????cntBits = getCntBits(utf_data[ptr]);
????????????if(cntBits == -1)
????????????{
????????????????++ptr;
????????????????continue;
????????????}
????????????else
????????????if(cntBits == 0)
????????????{
????????????????unic = UTFC2UniC(utf_data, ptr, cntBits);
????????????????++ptr;
????????????}
????????????else
????????????{
????????????????unic = UTFC2UniC(utf_data, ptr, cntBits);
????????????????ptr += cntBits;
????????????}
?
????????????unis.append(unic);
文档评论(0)