貌似是一个简单的问题(也许还真是简单的)但是却有时候却有点难啃
char在Java中应该是2个字节
byte在Java中应该是1个字节
char x = '编'; //这样是合法的,输出也是2个字节
但是
String str = "编";
byte[] bytes = str.getBytes(); //为什么这里bytes要占用3个字节呢?
3个字节一共是3*8=24个bits,那么str.getBytes()这个方法是怎么回事呢?
解答:
首先,要搞清楚 code point 和 encoding 的区别。Java 是遵循 unicode 4.0 标准的,而内部的 character 以 utf-16 作为 encoding。unicode 4.0 标准包含从 U+0000-U+FFFF 的基本多语言平面和 U+10000-U+10FFFF 的扩展平面的文字,这是 code point。Java 的 char 类型是 16 bit 的,所以单个 char 只支持基本平面内的文字,而扩展平面的文字是由一对 char 来表示的。而 String.getBytes() 这个方法是按照指定的 encoding 返回字符串,一般中文系统的默认编码是 utf-8 (linux, mac) 或者 gbk/gb18030 (windows)。只要是基本平面内的文字,utf-8码的中文都是3字节的,而 gbk/gbk18030 是2字节的。
分享到:
相关推荐
ORACLE数据库汉字占几个字节问题.pdf
解决安装Windows8系统后C盘空间显示0字节问题.docx
0.jar包是已经把修改文件放进去后的结果。可以直接用 1.Utils类中有说明 2/表头乱码问题请参考http://download.csdn.net/detail/hongyuan19/4073652
主要介绍了c# String扩展 让你在PadLeft和PadRight时不再受单双字节问题困扰,需要的朋友可以参考下
本文针对STM32串口第一个字节丢失问题进行了分析说明。
本文就C语言中字节对齐的问题进行详细的解析,感性趣的朋友可以看看。
字节跳动往年的面试题目和解答,主要内容包括网络系统、Java开发和数据库。经典问题有乐观锁悲观锁区别、死锁产生的原因、三次握手和四次挥手和B树和B+树的区别等。
关于C语言中的结构体字节对齐问题,在《C与指针》一书中提到,但是似乎没有说清楚,还是我理解不完全?所以,根据书上和网上资料,总结一些关于C语言中的结构体字节对齐的知识。这里的讨论和代码,都在VS2010下,GCC...
发现 字节问题...一个ARP包 的字节是 多少来着 不记得了 但是我的2个结构体加起来 是超过了那个 字节 为什么会这样呢 ? 因为结构体 有自动 数据对齐的功能 详细情况 大家也应该清楚 然后我就自己设置 了 下 对齐的...
编码字节==============这是什么? 有时你只是想解决一些问题。 以下文件是我对 coderbyte 问题的回答。 我这样做的部分原因是我希望将来能够引用这些,但主要是因为 coderbyte 编辑器很烦人。 =)
易语言快速字节集类模块源码,快速字节集类模块,ADD_,SUB_,ADD,SUB,取字节集长度_,取空白字节集_,取变量数据地址_字节集,从文件读_,写到文件_,取长度,取字节集,置字节集,清除字节集,释放缓冲区,添加,添加文本,插入,...
C语言程序设计的字节问题,作者自己写的内容,希望对大家有帮助,感谢大家的支持,作者还会继续上传资源的
2,修复SANDISK EMMC 量产OK 冲洗上盘0字节问题; 3,量产工具同 0712C 2016.09.18 1,在固件0520C的基础上修改 2,修复量产成CDROM后,电脑休眠 唤醒后,CDROM无法识别的问题; 3,量产工具同0712C 2016.07.12 ...
总结了字节对齐的一些规则,主要是结构体里边界填充后的字节对齐问题。
USB OnCardSorting Ver 3....4. 增加固定容量时系统编程块 -2 必须有效,解决 0 字节问题。 5. 改进因 LOGO 保护在 256/16 位颜色设定状态下而限制使用问题。 6. 增加已经量产过的磁盘在量产界面上显示量产后的容量。
详细的字节序与位序描述,以及需要注意的问题。
c++内存中字节对齐问题详解
结构体的sizeof值,并不是简单的将其中各元素所占字节相加,而是要考虑到存储空间的字节对齐问题。这些问题在平时编程的时候也确实不怎么用到,但在一些笔试面试题目中出是常常出现,对sizeof我们将在另一篇文章中...
本文主要讲了什么是字节对齐,为什么要对齐,已经应该注意的一些问题,下面一起来看看