一个汉字占几个字节的问题
大家都说一个汉字占两个字节(byte)
但是为什么运行程序会得到如下结果
String name="宋";
int a=name.getBytes("gb2312").length;
System.out.println(a);//a=2
a=name.getBytes("utf-8").length;//一个汉字占3个字节
System.out.println(a);//a=3
a=name.getBytes("gbk").length;
System.out.println(a);//a=2
a=name.getBytes("ISO8859-1").length;//一个汉字占一个字节
System.out.println(a);//a=1
a=name.length();//一个汉字占一个长度
System.out.println(a);//a=1
a=name.getBytes("UNICODE").length;//一个汉字占一个字节
System.out.println(a);//a=4
java的默认编码是UNICODE吧,应该是4个字节啊

------解决方案--------------------
大家说的一个汉字占两字节是这样的情况,
把汉字当做字符存,就是:
char a = '中';

这个时候就是占用两字节,,因为char类型就是2字节,,但是具体要看存储形式,,有的以unicode码,,那字节数就不是两字节了,,,, 
------解决方案--------------------
UNICODE 是一种字符集,在 Java 中直接使用 Unicode 转码时会按照 UTF-16LE 的方式拆分,由于 UTF-16 分为 UTF-16LE 和 UTF-16BE,也就是小端序和大端序,因此在网络传过程中,无法判断是 LE 还是 BE 序的,因此需要加上一个额外的字节序 BOM 头。

BOM 头的字符是一个特殊的字符,其 Unicode 编码为 U+FEFF,字符名为“ZERO WIDTH NON-BREAKING SPACE”,根据 RFC2781 3.2 节规定,开头两个字节为 FE FF 的称为 Big-Endian,开头为 FF FE 的称为 Little-Endian。

因此,你直接使用 Unicode 转换字节的话,也就是按 UTF-16LE 方式进行解码,会额外地加上 BOM 的两个字节 FF FE。 
------解决方案--------------------
UTF-8 在设计之初就没有 BE 和 LE 的问题,只有大端序,不会存在小端序的,因此 UTF-8 的编码不需要使用 BOM 头。 
------解决方案--------------------
字符集与字符编码在某种情况上来说不是一回事。

Unicode 是字符集,而 UTF-8, UTF-16, UTF-32 均是对于 Unicode 字符集的编码格式。

而在某些情况下来说又是一样的,比如:

GB2312 既是字符集名,也是字符编码格式名。

一个汉字占几个字节的问题相关推荐

  1. oracle和mysql存储汉字_mysql和oracle的一个汉字占几个字节

    以前一直使用oracle11g,一个汉字占3个字节,所以在操作mysql时也一直这样分配长度. 今天测试了下发现不对了 可以看到第一个的长度确实是15,但是第二个为什么是5? 在网上找到资料:char ...

  2. Oracle中一个汉字占几个字节

    Oracle中一个汉字占几个字节? 某天,在向一个字段类型为CHAR(6)的表中插入数据'大沽口'时报错,提示'too large for column(actual: 9 ,maximum: 6)' ...

  3. 一个汉字占多少个字节

    一个汉字占多少个字节 不同编码方式1个英文字母占的字节是不同的: 1,ASCII码:一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间. 2,UTF-8编码:一个英文字符等于一个 ...

  4. utf-8 中的一个汉字占几个字节

    utf-8 中的一个汉字占几个字节 占 2 个字节的:〇 占 3 个字节的:基本等同于 GBK,含 21000 多个汉字 占 4 个字节的:中日韩超大字符集里面的汉字,有 5 万多个 1 个 utf8 ...

  5. java一个中文几个字节_java一个汉字占几个字节;一个字符占几个字节?redis一个汉字占几个字节;一个字符占几个字节?...

    脱离字符集编码 谈这个问题没什么实际意义 我不知道你讲的Java 中汉字是几个字节具体是什么意思 Java 中 Character 采用的是 utf-16 编码,那么就是两个字节(0----65535 ...

  6. 【转】utf-8的中文是一个汉字占三个字节长度

    因为看到百度里面这个人回答比较生动,印象比较深刻,所以转过来做个笔记 原文链接 https://zhidao.baidu.com/question/1047887004693001899.html 知 ...

  7. utf-8的中文是一个汉字占三个字节长度吗?

    英文字母和中文汉字在不同字符集编码下的字节数 英文字母: 字节数 : 1;编码:GB2312 字节数 : 1;编码:GBK 字节数 : 1;编码:GB18030 字节数 : 1;编码:ISO-8859 ...

  8. UTF-8中文一个汉字占几个字节?

    英文字母和中文汉字在不同字符集编码下的字节数 英文字母: 字节数 : 1;编码:GB2312 字节数 : 1;编码:GBK 字节数 : 1;编码:GB18030 字节数 : 1;编码:ISO-8859 ...

  9. Java一个汉字占几个字节(详解与原理)

    1.先说重点: 不同的编码格式占字节数是不同的,UTF-8编码下一个中文所占字节也是不确定的,可能是2个.3个.4个字节: 2.以下是源码: 1 @Test2 public void test1() ...

最新文章

  1. 【ES6】Proxy对象
  2. [转载]TFS安装配置教程
  3. 若依微服务版前端怎样在接口返回500时去掉一直弹窗提示服务未找到
  4. dockerfile 的使用
  5. Linux 安装Redis全过程日志
  6. go mysql use 问题,Go语言使用MySql的方法
  7. 20道有代表性的HTML基础题,测测你能入前端的门吗
  8. 小云(云层-陈霁)的发展史
  9. 基于SSM的个人健康管理系统
  10. CentOS 安装SVN以及可视化管理工具iF.SVNAdmin
  11. 软件研发管理:置身其中看问题
  12. python安装pyaudio
  13. 3D模型实现「唱、跳、Rap、篮球」
  14. uniapp数组已经更新到data页面不实时渲染问题
  15. android sit0 ip6tnl0,USB wifi调试笔记
  16. canvas.toDataURL()降低图片质量,以减少图片上传大小
  17. C\C++中getchar()函数
  18. C语言:int型数据向char型数据的强制类型转换原理
  19. MATLAB中关于patch的用法(涉及vertice,faces等的基础的介绍)
  20. 广州电信高级前端开发工程师笔试题及答案(国企面试题大全)

热门文章

  1. centos7装机与基础配置
  2. 2020 年了,微信公众号还有前途吗?
  3. MATLAB的MEX文件编写和调试
  4. Canvas 贪吃蛇大作战
  5. 走近Ts,用了爽,用后一直爽(一)
  6. GitLab的安装及使用教程(超级详细)
  7. CAP 定理、 BASE 理论
  8. 计算机access和office,计算机二级access和office
  9. FPGA学习之串口发送程序设计(来自小梅哥的教程学习者)
  10. 新手小白学java 编码转换流 OutputStreamWriter InputStreamReader