问题

在java中,一个字符等于多少字节?

或者更详细的问:在java中,一个英文字符等于多少字节?一个中文字符等于多少字节?

答案

Java采用unicode来表示字符,java中的一个char是2个字节,一个中文或英文字符的unicode编码都占2个字节,但如果采用其他编码方式,一个字符占用的字节数则各不相同。

在 GB 2312 编码或 GBK 编码中,一个英文字母字符存储需要1个字节,一个汉子字符存储需要2个字节。

在UTF-8编码中,一个英文字母字符存储需要1个字节,一个汉字字符储存需要3到4个字节。

在UTF-16编码中,一个英文字母字符存储需要2个字节,一个汉字字符储存需要3到4个字节(Unicode扩展区的一些汉字存储需要4个字节)。

在UTF-32编码中,世界上任何字符的存储都需要4个字节。

举个例子:

java代码如下:

String str = "测试test";
int byte_len = str.getBytes().length;
int len = str.length();
System.out.println("字节长度为:" + byte_len);
System.out.println("字符长度为:" + len);

如果编码方式为GBK,对于字符串“测试test”,字符长度为6,字节长度为8。

如果编码方式为UTF_8,对于字符串“测试test”,字符长度为6,字节长度为10。

注意:字符串的length()方法返回的是字符长度,一个汉子表示一个字符,一个字母也表示一个字符。

unicode和UTF_8有什么关系

UTF-8就是在互联网上使用最广的一种unicode的实现方式。unicode的其他实现方式还包括UTF-16和UTF-32。

UTF-8的最大特点是,它是一种可变的编码方式。

详情请自行百度~

那么问题来了

说了这么多还是不明白,到底java中一个char表示几个字节?请看下面解释

    public class Test {  public static void main(String[] args) {  String str= "测";  char x ='测';  byte[] byteStr=null;  byte[] byteChar=null;  try {  byteStr = str.getBytes("utf-8");  byteChar = charToByte(x);  } catch (Exception e) {  e.printStackTrace();  }  System.out.println("byteStr :"+byteStr.length);  System.out.println("byteChar:"+byteChar.length);  }  public static byte[] charToByte(char c) {   byte[] b = new byte[2];   b[0] = (byte) ((c & 0xFF00) >> 8);   b[1] = (byte) (c & 0xFF);   return b;   }  }  

运行结果:

byteStr:3
byteChar:2

  

java是用unicode来表示字符,"测"这个中文字符的unicode就是2个字节。

String.getBytes(encoding)方法是获取指定编码的byte数组表示,

如果不指定encoding则取系统默认的encoding。

作者:ouym

出处:http://www.cnblogs.com/ouym/

弄清java中的字节与字符相关推荐

  1. Java中的字节输入出流和字符输入输出流

    Java中的字节输入出流和字符输入输出流 下面哪个流类属于面向字符的输入流( ) A BufferedWriter  B FileInputStream  C ObjectInputStream  D ...

  2. java中判断两个字符(或者字符串相等)

    string a,b;//两字符串 在java中判断两个字符(字符串)相等,用a.equals(b); if(a.equals(b)){ //如果相等,返回值为true }else{ //如果不相等, ...

  3. java中基本字节输出流类是_java中基本输入输出流的解释

    网络程序的很大一部分是简单的输入输出,即从一个系统向另一个系统移动字节.字节就是字节,在很大程度上,读服务器发送的数据与读取文件没什么不同:向客户传送数据与写入一个文件也没有什么区别. Java中输入 ...

  4. Java中的字节流和字符流如何理解——精简

    目录 引言 字节流和字符流 字节流 字节输入流 字节输出流 字符流 字符输入流 字符输出流 引言 在完完全全的完成本学期的学习任务之后,终于可以有时间继续更新Java相关的文章了.那么今天我们要学习的 ...

  5. Java中的字节流和字符流区别

    字节流 1.字节流在操作的时候不会用到缓冲区(也就是内存) 2.字节流可用于任何类型的对象,包括二进制对象 3.字节流处理单元为1个字节,操作字节和字节数组. 字符流 1.而字符流在操作的时候会用到缓 ...

  6. java signed_如何从java中的字节读取signed int?

    我有一个规范读取接下来的两个字节是signed int. 要在java中读取我有以下内容 当我使用以下代码在java中读取signed int时,我得到值65449 计算无符号的逻辑 int a =( ...

  7. java中的字节流和字符流

    前言 字节流:分为字节输入流(InputStream)和字节输出流(OutputStream) 字符流:分为字符输入流(InputStreamReader)和字符输出流(OutputStreamWri ...

  8. java中0x0f对应的字符是什么_常见字符的ASCII码,java中如何获取字符的ASCII码

    一.常见字符的ASCII码 ASCII 码使用指定的7 位或8 位的二进制数组合来表示128 或256 种可能的字符. 标准ASCII 码也叫基础ASCII码,使用7 位二进制数(最高的1位二进制为0 ...

  9. java中如何输入一个字符(用字符串转换)

    java中的Scanner类中并没有包括单独输入char型字符的情况,但是我们可以通过输入一个长度仅为1的字符串,然后将字符串转换为char型字符,再用新的char型变量接收就好了. java源文件名 ...

最新文章

  1. Git的配置SSHKey
  2. 初识Qt Creator
  3. JavaScript简介-1
  4. Linux下监视NVIDIA的GPU使用情况
  5. pytorch从dataframe中提取信息,变为可训练的tensor
  6. Python-Numpy语法总结-数组的创建
  7. 《人件》 精华版 为软件企业指明成功之路 为开发人员伸张权益
  8. 如何通过视频转换器将qsv格式转换成mp4格式
  9. windos无法对计算机进行,电脑提示windows无法完成格式化如何解决
  10. SLURM Array Job
  11. js iframe 打印 打印预览 页眉页脚的设置
  12. 抖音抓包获取cookie
  13. 重大利好,区块链技术能保护森林资源?
  14. 泰森多边形(Voronoi图)
  15. 中国技术经济学会区块链分会秘书长贾永政:人工智能与区块链上的存储和计算
  16. java mail imap 附件下载_Java Mail 发送带有附件的邮件
  17. Python 中删除文件的几种方法|好用
  18. 面向流动人口管理的人脸验证系统设计及实现 论文+答辩PPT+项目工程文件
  19. VIVO X7玫瑰金与银色边框颜色区分 方案(C++实现)
  20. 虚拟主服务器是什么原因,什么是虚拟主机?

热门文章

  1. 【C语言训练】猴子偷桃
  2. 10个python小技巧,优雅地书写人生
  3. 电商数据分析--流程、方法
  4. react17源码浅析
  5. vmware workstation 各个版本官网下载链接
  6. C++: string讲解 前序
  7. 北京指标可以继承吗?
  8. macOS 非 PC, 为何一定要绑定AD?
  9. 计算机专业英语词语缩略,计算机专业英语缩略词.doc
  10. Win10下更改Android AVD 模拟器的存放位置的方法