UTF-8到Unicode的编码转换.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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)

hf916589 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档