byte数组转String

xiaobaigo 2018-01-04 11:26:08
byte[] srtbyte = {0,1,2,3,4,5};
String s1=new String(srtbyte);
syso(s1);
结果出现乱码。这是什么原因?
看了一些网上相关的大部分都是中文编码问题,与我这问题还是有不同。
2.如果byte数组的值是字符数组。转String就没问题了
这是为什么
...全文
1235 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
NRT 2018-02-28
  • 打赏
  • 举报
回复
它似乎只能将除数字字符之外的字符转换为字符串。 也有可能是编码表的问题
聪头 2018-01-19
  • 打赏
  • 举报
回复
用字符串拼接方式
「已注销」 2018-01-18
  • 打赏
  • 举报
回复
电脑存储的是编码,但编码如何映射成文字,也就是 ASCII 字符集,是人为制定的固定标准。就比如你的身份编号是 97,而你的名字是 'a'。电脑里储存的是你的编号 97,展示给用户看的是 'a',你的编号和 97 和你名字 'a' 唯一且永久性的关联起来。即 new String(new byte[]{ 97 }) 显示出来就是字符串 "a"。由于编码 0~5 对应的字符是不可见字符,显示出来是乱码。在 Linux 上使用 byte[] 来构造 String 是默认是 UTF-8 编码,刚好和 ANSI 标准的数字和英文部分是一致的。
最猛的阿良 2018-01-16
  • 打赏
  • 举报
回复
引用 5 楼 zhangmin1992132 的回复:
我擦嘞,亲,你确定你的代码是报乱码吗,我测试后发现压根不报错不乱码不继续执行, 比特数组,字符数组都支持,只不过你传入的比特数组初始化的时候不对
byte[] srtbyte = {0,1,2,3,4,5};
    	System.out.println(srtbyte[0]);
    	String s1 = new String(srtbyte);
    	System.out.println(s1);
按照注释掉的方式传就可以了
你这个得到的是对象 不是值啊
Lie_lei 2018-01-08
  • 打赏
  • 举报
回复
因为Java的字符是Unicode编码的,一个字符等于两个字节,你把一个字节数组传进去他不认识,你可以与0xf,他就认识。
xiaobaigo 2018-01-06
  • 打赏
  • 举报
回复
本质原因还没有理解。但是确实是如果byte数组中存储的是95,96那些数据打印的是对应的char值。至于编码,我的这个简单的小Test与之无关。放下代码可以去测试下。 public class A { public static void main(String[] args) throws UnsupportedEncodingException {//这个是我当时使用String带编码时throws的异常, byte b='0'; System.out.println(b);//48 byte []b2=new byte[]{0,1,2,99,100}; String s1=new String(b2); System.out.println(s1);//乱码 } }
邻家大哥呀 2018-01-05
  • 打赏
  • 举报
回复
1.可以定义编码方式使下 String res = new String(srtbyte,"UTF-8"); 2.可以使用ToString()进行转换
youyouke 2018-01-05
  • 打赏
  • 举报
回复
byte[] srtbyte = {0,1,2,3,4,5}; String s1=new String(srtbyte);//在这个构造函数中是通过使用平台的默认字符集解码指定的字节数组,可以使用String(byte[] bytes, Charset charset) 通过指定字符集对字节数组解码 syso(s1); 你也可将程序更改为: byte[] srtbyte = {0,1,2,3,4,5}; String s1=""; for(int i=0;i<srtbyte.length;i++){ s1+=srtbyte[i]; } System.out.println(s1); 来实现
Sunyiban 2018-01-05
  • 打赏
  • 举报
回复
可以看看源码,他走的是decode方法,你的数据找不到对应的码值所以就出现乱码
zhangmin1992132 2018-01-05
  • 打赏
  • 举报
回复
我擦嘞,亲,你确定你的代码是报乱码吗,我测试后发现压根不报错不乱码不继续执行, 比特数组,字符数组都支持,只不过你传入的比特数组初始化的时候不对
byte[] srtbyte = {0,1,2,3,4,5};
    	System.out.println(srtbyte[0]);
    	String s1 = new String(srtbyte);
    	System.out.println(s1);
按照注释掉的方式传就可以了
soton_dolphin 2018-01-04
  • 打赏
  • 举报
回复
你传入的byte数组必须可以转化成相应的字符才可以,不是随便的byte都可以转化成字符的。 比如byte[] chars = {100,99,98,97}; //输出 dcba
galiniur0u 2018-01-04
  • 打赏
  • 举报
回复
楼主要知道,1!='1',跟编码没啥关系。
oyljerry 2018-01-04
  • 打赏
  • 举报
回复
因为你的byte数组对应的字符转换成String后不是正常字符,自然是乱码。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧