java - “a”.getBytes("GBK")为什么等于1
伊谢尔伦
伊谢尔伦 2017-04-17 15:56:54
[Java讨论组]

按我的理解,GBK是定长字符编码,不管是中文还是英文,都是两个字节。


"a".getBytes("GBK");   //byte数组理论上长度为2,但其实是1

//其它的一些
“中”.getBytes("GBK");  //byte数组长度为2
“中”.getBytes("UTF-8");    //byte数组长度为3
伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(1)
大家讲道理

国标(GB)系列字符集只是定义了我们汉字的code point,不是具体的实现方式,像gb2312 就有两种常见的实现方式(也就是我们经常说的编码)

  • EUC-CN

  • HZ

我们要明确,设计一种编码方案要与之前的编码方案(像 ASCII、ISO-8859-1)兼容,现在大多数多字节编码方案都是变长编码。

对于 gbk 来说,它既是一套字符集也是一种编码方案,而且是种变长编码方案,

  • 0x000x7F之间的编码,与 ASCII 保持一致,最高位 0 填充

  • 双字节,第一个字节范围0x810xFE,第二个字节范围407E80 FE 表示汉字等字符

以上回答了题主的问题。

关于这个问题的细节,其实很复杂的多。如果感兴趣,可以静下心来看看我总结的博客

字符串,那些你不知道的事

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号