首页 > 代码库 > 记一次UTF8中文编码的乱码

记一次UTF8中文编码的乱码

1.问题描述

    业务需求  1.将某个包含中文的string转换成utf-8对应的byte[]。count作为参数一起传输

                 2.经网络传递

                 3.接收传来的byte[]与其他信息

                 4.解码byte[]

    在用utf-8解码byte[]成string时出现了尾部缺失与乱码

2.原因分析

    在使用英文与数字的时候,string类型length往往与编码之后的byte[]的length一致。

    但utf-8是不定长的,utf-8存储中文时占2~4个字节。

    utf-8是根据左侧位1的个数来决定占用了几个字节来决定其编码长度的:

    utf-8可以根据字的第一个字节移位推出长度的

    0xxxxxxx

    110xxxxx 10xxxxxx

    1110xxxx 10xxxxxx 10xxxxxx

    11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

由于本人在解码时直接使用string类型length作为解码时候的count,所以造成了解码时候的不完整与乱码

3.解决办法

    将byte[]的length作为count传输即可。