一个很奇特的编码问题

AnonymousMonkey 2017-09-21 08:26:40
String str = "你";
byte[] bytes = str.getBytes();
for (byte b : bytes) {
System.out.println(b);
}
// '你' 的unicode编码值是'\u4f60',对应的二进制位应该是0100 1111 0110 0000,但是输出结果却是-60 和 -29,谁能解答下呢?谢谢了
...全文
371 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
galiniur0u 2017-09-22
  • 打赏
  • 举报
回复
可能是楼主的文件编码方式问题,例如,如果楼主使用UTF-8编码,是会得到3个值,如果楼主想要按照unicode编码输出,就要按照unicode的方式来取。

//前8位字符
char c = str.charAt(0);
int begin = (c >>> 8);
System.out.println(begin);
//后8位字符
c = str.charAt(0);
int end = (c & 0xFF);
System.out.println(end);
仅供参考哈
枫醉秋 2017-09-22
  • 打赏
  • 举报
回复
楼上已经回答了。。。。
幻乐星空 2017-09-22
  • 打赏
  • 举报
回复
楼主使用了byte[] bytes = str.getBytes(); String的getBytes方法使用的是什么编码呢,是由什么决定的呢? 1、如果使用了eclipse,由java文件的编码决定 2、如果没有使用eclipse,则有本地电脑语言环境决定,中国的都是默认GBK编码 至于结果 #4楼已经给了答案了
自由自在_Yu 2017-09-22
  • 打赏
  • 举报
回复
当然奇怪了,因为你输出的是GBK的编码方式呀,查询汉字编码:http://www.qqxiuzi.cn/bianma/zifuji.php 你 GB2312编码:C4E3 BIG5编码:A741 GBK编码:C4E3 GB18030编码:C4E3 Unicode编码:4F60 GBK编码:C4E3 对应的是11000100 11100011 补码 00111100 00011101 -60 -29
科比请留步 2017-09-21
  • 打赏
  • 举报
回复
一个汉子字符是由两个字节组成的

62,628

社区成员

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

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