最新公告
  • 欢迎您光临立业阁,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • java中byte[]转String出现乱码_Java教程


    首先常用的byte[]直接转String很简单:

    public static void main(String[] args) {  
    String str="我是中国人";  
    byte[] arr=str.getBytes();  
    System.out.println("打印:"+arr);
    for(byte e : arr) {
    System.out.print(e + " ");
    }
    String str2=new String(arr);  
    System.out.println("\n打印2:"+str2);  
    }

    java相关视频推荐:java学习

    比如上面这个,输出的结果是:

    打印:[[email protected]
    -50 -46 -54 -57 -42 -48 -71 -6 -56 -53 
    打印2:我是中国人

    看到这个就知道编码了。byte是一个字节,汉字是两个字节。所以五个汉字要十个byte类型的数字存储。然后数字变成汉字,这中间就是走了一个编码规范的过程。

    那么java中是如何处理字符编码的?

    JAVA使用自己的String类,并且String类对象是不需要指定编码表的!为什么它会自己知道一堆数字各代表什么字符呢?就是因为String里的字符信息是用UNICODE编码存放的。而JAVA为了表示字符(注意是单个字符),也有char这个数据类型,而且他的大小是固定2个8位16进制数字长度,也就是0~65535。为的就是对应UNICODE里面的一个字符。

    大家如果想取一个String里的按UNICODE数字,可以用getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 方法取得一个char[],这个char[]里就是表示String字符的,按UNICODE编码表编码的数字。

    为什么会出现byte[ ]转String又会出现乱码现象?

    很显然,就是上面提到的,编码规范不一样。举个栗子,比如GB2312规范的中文“当”字,就是用0xB5,0xB1这两个八位的数字来表示的。在英文系统上,没有GB2312编码表,给他一个0xB5,0xB1,他就傻傻的当作ASCII来处理。放到Java里,他又会按照自己的UNICODE规范来处理,所以规范不一样,就会出现奇怪的结果,也就是乱码。

    那么我们怎么解决byte[ ]转String的乱码问题呢?

    得看byte[]来自哪里了。时常会遇到,要把一张图片转为byte[]然后在转为String流对象传输到别的地方,接收者再转为byte[]再变成图片。

    1、直接传输byte[]的话,会出现byte[]过长数据丢失。因为不是所有的byte组合都可以映射成char。

    2、用常见的Base64编码规范吧。base64的编码规范就是将常见的字符转换成6位二进制表示(常用64个所以叫base64吧)。怎么写,有现成的工具类哦如下:

    import org.apache.commons.codec.binary.Base64;  
    public class UtilHelper {     
        //base64字符串转byte[]  
        public static byte[] base64String2ByteFun(String base64Str){  
            return Base64.decodeBase64(base64Str);  
        }  
        //byte[]转base64  
        public static String byte2Base64StringFun(byte[] b){  
            return Base64.encodeBase64String(b);  
        }  
    }

    这样就可以保证byte[]和String之间的标准转换了。

    更多相关文章教程推荐:java零基础入门

    以上就是java中byte[]转String出现乱码的详细内容,更多请关注liyege.cn其它相关文章!

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    • 1162会员总数(位)
    • 111858资源总数(个)
    • 8本周发布(个)
    • 2 今日发布(个)
    • 241稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情
    冀ICP备19022365号-1 百度地图

    [email protected]

    立业阁(www.liyege.cn)免费提供wordpress主题模板、dedecms模板、帝国cms模板、小说网站源码、电影网站源码以及网络技术分享,建站源码,小说模板,电影模板,网赚教程,VPS推荐