字节数组的编码格式问题,求交流!!

浪中云 2014-03-22 10:09:46
public static void testUTF8() throws UnsupportedEncodingException{
byte[] bytes = {
(byte)128,
};

String str = new String(bytes, "UTF-8");

System.out.println((int)str.charAt(0));
}


这段代码在我机器里面输出竟然是65533, 我查看UTF-8的编码格式之后,还是不得其解
求解释,求交流
...全文
282 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
浪中云 2014-03-23
  • 打赏
  • 举报
回复
引用 9 楼 jerry_dqh 的回复:
[quote=引用 8 楼 wgsddfe 的回复:] [quote=引用 6 楼 jerry_dqh 的回复:] [quote=引用 4 楼 wgsddfe 的回复:] [quote=引用 2 楼 wangxf_8341 的回复:] 首先,128不在byte的范围,强制转换会变成-1,试了一下,单独一个byte,只要是负数,经过String编码之后,都变成了-3(byte),String存储的是char,是整数范围,用int表示就是65533
谢谢你的解答,我想知道为啥所有负数都会转换成-3,这个中间转换的过程是什么样的,谢谢[/quote] 搜索了一下,楼主看一下 http://my.oschina.net/joymufeng/blog/139952 讲得比较清晰[/quote] 谢谢,但是这篇文章没有找到我想要的答案[/quote] 65533是因为,String使用byte[]转换时,由于没有对应的编码 ,被转换为 unicode码【 � U+fffd 65533】,就是一个问号,所以获取到的char应该是�. 这个值为U+fffd 65533。[/quote] 说的有道理,谢了!
碼上道 2014-03-23
  • 打赏
  • 举报
回复
引用 8 楼 wgsddfe 的回复:
[quote=引用 6 楼 jerry_dqh 的回复:] [quote=引用 4 楼 wgsddfe 的回复:] [quote=引用 2 楼 wangxf_8341 的回复:] 首先,128不在byte的范围,强制转换会变成-1,试了一下,单独一个byte,只要是负数,经过String编码之后,都变成了-3(byte),String存储的是char,是整数范围,用int表示就是65533
谢谢你的解答,我想知道为啥所有负数都会转换成-3,这个中间转换的过程是什么样的,谢谢[/quote] 搜索了一下,楼主看一下 http://my.oschina.net/joymufeng/blog/139952 讲得比较清晰[/quote] 谢谢,但是这篇文章没有找到我想要的答案[/quote] 65533是因为,String使用byte[]转换时,由于没有对应的编码 ,被转换为 unicode码【 � U+fffd 65533】,就是一个问号,所以获取到的char应该是�. 这个值为U+fffd 65533。
浪中云 2014-03-23
  • 打赏
  • 举报
回复
引用 6 楼 jerry_dqh 的回复:
[quote=引用 4 楼 wgsddfe 的回复:] [quote=引用 2 楼 wangxf_8341 的回复:] 首先,128不在byte的范围,强制转换会变成-1,试了一下,单独一个byte,只要是负数,经过String编码之后,都变成了-3(byte),String存储的是char,是整数范围,用int表示就是65533
谢谢你的解答,我想知道为啥所有负数都会转换成-3,这个中间转换的过程是什么样的,谢谢[/quote] 搜索了一下,楼主看一下 http://my.oschina.net/joymufeng/blog/139952 讲得比较清晰[/quote] 谢谢,但是这篇文章没有找到我想要的答案
浪中云 2014-03-22
  • 打赏
  • 举报
回复
自己顶一个!
碼上道 2014-03-22
  • 打赏
  • 举报
回复
引用 4 楼 wgsddfe 的回复:
[quote=引用 2 楼 wangxf_8341 的回复:] 首先,128不在byte的范围,强制转换会变成-1,试了一下,单独一个byte,只要是负数,经过String编码之后,都变成了-3(byte),String存储的是char,是整数范围,用int表示就是65533
谢谢你的解答,我想知道为啥所有负数都会转换成-3,这个中间转换的过程是什么样的,谢谢[/quote] 搜索了一下,楼主看一下 http://my.oschina.net/joymufeng/blog/139952 讲得比较清晰
碼上道 2014-03-22
  • 打赏
  • 举报
回复
不太理解为啥java中负数都转为-3. 帮顶学习一下
浪中云 2014-03-22
  • 打赏
  • 举报
回复
引用 2 楼 wangxf_8341 的回复:
首先,128不在byte的范围,强制转换会变成-1,试了一下,单独一个byte,只要是负数,经过String编码之后,都变成了-3(byte),String存储的是char,是整数范围,用int表示就是65533
谢谢你的解答,我想知道为啥所有负数都会转换成-3,这个中间转换的过程是什么样的,谢谢
代码间的舞者 2014-03-22
  • 打赏
  • 举报
回复
2楼讲的有道理,学习了
淡定的峰哥 2014-03-22
  • 打赏
  • 举报
回复
首先,128不在byte的范围,强制转换会变成-1,试了一下,单独一个byte,只要是负数,经过String编码之后,都变成了-3(byte),String存储的是char,是整数范围,用int表示就是65533

62,614

社区成员

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

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