关于中文简体汉字用unicode存储的问题

yeyu333 2015-01-31 12:21:56
//编码
String s = "中国";
//结果输出长度为6
byte[] arr = s.getBytes("unicode");
System.out.println("unicode,length:" + arr.length);
System.out.println(Arrays.toString(arr));

String result = new String(arr,"unicode");
System.out.println(result);
输出结果:
unicode,length:6
[-2, -1, 78, 45, 86, -3]


在这里,曾一度让我以为每个汉字是占3个字节,尽管书上说只占两个字节。但是只写入一个汉字 “好” 时:
输出结果:
unicode,length:4
[-2, -1, 89, 125]

这时候发现确实应该是占了两个字节,【-2,-1】应该是某个东西,并且是隐形的。以为是换行,但是这个应该不会是负数,而且应该是在末尾显示。所以不知道-2,-1是什么意思?
谢谢!
...全文
196 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
普凡 2015-02-03
  • 打赏
  • 举报
回复
引用 4 楼 kk_124 的回复:
要看编码 utf-8是3字节 gbk gb2312是2个字节
顺便补充一下: Unicode只是定义了一个庞大的、全球通用的字符集,并为每个字符规定了唯一确定的编号,具体存储为什么样的字节流,取决于字符编码方案。
普凡 2015-02-03
  • 打赏
  • 举报
回复
要看编码 utf-8是3字节 gbk gb2312是2个字节
yeyu333 2015-01-31
  • 打赏
  • 举报
回复
引用 1 楼 rumlee 的回复:
(Unicode是一种字符编码方法,不过它是由国际组织设计,可以容纳全世界所有语言文字的编码方案。Unicode的学名是"Universal Multiple-Octet Coded Character Set",简称为UCS。UCS可以看作是"Unicode Character Set"的缩写。) 在UCS编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议在传输字节流前,先传输字 符"ZERO WIDTH NO-BREAK SPACE"。 这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little-Endian的。因此字符"ZERO WIDTH NO-BREAK SPACE"又被称作BOM。
、 听不懂..
rumlee 2015-01-31
  • 打赏
  • 举报
回复
(Unicode是一种字符编码方法,不过它是由国际组织设计,可以容纳全世界所有语言文字的编码方案。Unicode的学名是"Universal Multiple-Octet Coded Character Set",简称为UCS。UCS可以看作是"Unicode Character Set"的缩写。) 在UCS编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议在传输字节流前,先传输字 符"ZERO WIDTH NO-BREAK SPACE"。 这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little-Endian的。因此字符"ZERO WIDTH NO-BREAK SPACE"又被称作BOM。

62,614

社区成员

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

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