请教一个字符编码的问题(unicode)

iammingbohello 2007-09-20 11:37:32
程序如下:
public class CharsetTest {
public static void main(String[] args)
{
String str = new String("好");
byte[] bt = str.getBytes("Unicode");
for(int i=0;i<bt.length;i++)
{
System.out.println(bt[i]);
}
}

以上程序用Unicde字符集解码为字符序列时,会解码成4个字节,Unicode不是两个字节的编码的吗?
如果用GBK解码就没有问题。

请指教,谢谢!


...全文
101 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
南南北北 2007-09-21
  • 打赏
  • 举报
回复
写错了,是使用其他字符编码表示字节数组的时候已经计算过了。
南南北北 2007-09-21
  • 打赏
  • 举报
回复
to: 火龙果



没有表示出来的原因可能是java使用UNICODE编码表示字符串,使用其他字符编码表示字符串时已经计算过了。
psyl 2007-09-20
  • 打赏
  • 举报
回复
norwolfli 解释的很到位,学习了
  • 打赏
  • 举报
回复
to: norwolfl

那 GBK、UTF-8 之类的编码就没有这种问题吗?
sea_force 2007-09-20
  • 打赏
  • 举报
回复
学习...
南南北北 2007-09-20
  • 打赏
  • 举报
回复
补充下楼上的。

big endian和little endian是CPU处理多字节数的不同方式。例如“汉”字的Unicode编码是6C49。那么写到文件里时,究竟是将6C写在前面,还是将49写在前面?如果将6C写在前面,就是big endian。还是将49写在前面,就是little endian。

前面多的FFFE或者FEFF就表示高字节在前还是低字节在前。
  • 打赏
  • 举报
回复
前面两个字节(0xFF 0xFE)可能是 Unicode 的前缀,不知道为什么会这样。

解码两个字时,是 6 个字节。
for_cyan 2007-09-20
  • 打赏
  • 举报
回复
一般用Unicode编码会在前面多出两个字节,即FF、FE
如果你多加几个汉字,你会发现仍是多这两个字节,所以Unicode就是两个字节的
而gbk没有多加什么东西
iammingbohello 2007-09-20
  • 打赏
  • 举报
回复
明白了,多谢!

62,614

社区成员

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

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