博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
弄清java中的字节与字符
阅读量:5370 次
发布时间:2019-06-15

本文共 1799 字,大约阅读时间需要 5 分钟。

问题

在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。

 

转载于:https://www.cnblogs.com/ouym/p/7607399.html

你可能感兴趣的文章
Java基础之字符串匹配大全
查看>>
面向对象
查看>>
lintcode83- Single Number II- midium
查看>>
[工具] Sublime Text 使用指南
查看>>
Web服务器的原理
查看>>
#10015 灯泡(无向图连通性+二分)
查看>>
HAL层三类函数及其作用
查看>>
Data Structure 基本概念
查看>>
[搬运] 写给 C# 开发人员的函数式编程
查看>>
core--线程池
查看>>
他山之石:加载图片的一个小问题
查看>>
shell - 常识
查看>>
Spring Cloud Stream消费失败后的处理策略(三):使用DLQ队列(RabbitMQ)
查看>>
PKUWC2018 5/6
查看>>
As-If-Serial 理解
查看>>
洛谷P1005 矩阵取数游戏
查看>>
在Silverlight中使用HierarchicalDataTemplate为TreeView实现递归树状结构
查看>>
无线通信基础(一):无线网络演进
查看>>
关于python中带下划线的变量和函数 的意义
查看>>
linux清空日志文件内容 (转)
查看>>