弄清java中的字节与字符
问题
在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中的字节与字符相关推荐
- Java中的字节输入出流和字符输入输出流
Java中的字节输入出流和字符输入输出流 下面哪个流类属于面向字符的输入流( ) A BufferedWriter B FileInputStream C ObjectInputStream D ...
- java中判断两个字符(或者字符串相等)
string a,b;//两字符串 在java中判断两个字符(字符串)相等,用a.equals(b); if(a.equals(b)){ //如果相等,返回值为true }else{ //如果不相等, ...
- java中基本字节输出流类是_java中基本输入输出流的解释
网络程序的很大一部分是简单的输入输出,即从一个系统向另一个系统移动字节.字节就是字节,在很大程度上,读服务器发送的数据与读取文件没什么不同:向客户传送数据与写入一个文件也没有什么区别. Java中输入 ...
- Java中的字节流和字符流如何理解——精简
目录 引言 字节流和字符流 字节流 字节输入流 字节输出流 字符流 字符输入流 字符输出流 引言 在完完全全的完成本学期的学习任务之后,终于可以有时间继续更新Java相关的文章了.那么今天我们要学习的 ...
- Java中的字节流和字符流区别
字节流 1.字节流在操作的时候不会用到缓冲区(也就是内存) 2.字节流可用于任何类型的对象,包括二进制对象 3.字节流处理单元为1个字节,操作字节和字节数组. 字符流 1.而字符流在操作的时候会用到缓 ...
- java signed_如何从java中的字节读取signed int?
我有一个规范读取接下来的两个字节是signed int. 要在java中读取我有以下内容 当我使用以下代码在java中读取signed int时,我得到值65449 计算无符号的逻辑 int a =( ...
- java中的字节流和字符流
前言 字节流:分为字节输入流(InputStream)和字节输出流(OutputStream) 字符流:分为字符输入流(InputStreamReader)和字符输出流(OutputStreamWri ...
- java中0x0f对应的字符是什么_常见字符的ASCII码,java中如何获取字符的ASCII码
一.常见字符的ASCII码 ASCII 码使用指定的7 位或8 位的二进制数组合来表示128 或256 种可能的字符. 标准ASCII 码也叫基础ASCII码,使用7 位二进制数(最高的1位二进制为0 ...
- java中如何输入一个字符(用字符串转换)
java中的Scanner类中并没有包括单独输入char型字符的情况,但是我们可以通过输入一个长度仅为1的字符串,然后将字符串转换为char型字符,再用新的char型变量接收就好了. java源文件名 ...
最新文章
- Git的配置SSHKey
- 初识Qt Creator
- JavaScript简介-1
- Linux下监视NVIDIA的GPU使用情况
- pytorch从dataframe中提取信息,变为可训练的tensor
- Python-Numpy语法总结-数组的创建
- 《人件》 精华版 为软件企业指明成功之路 为开发人员伸张权益
- 如何通过视频转换器将qsv格式转换成mp4格式
- windos无法对计算机进行,电脑提示windows无法完成格式化如何解决
- SLURM Array Job
- js iframe 打印 打印预览 页眉页脚的设置
- 抖音抓包获取cookie
- 重大利好,区块链技术能保护森林资源?
- 泰森多边形(Voronoi图)
- 中国技术经济学会区块链分会秘书长贾永政:人工智能与区块链上的存储和计算
- java mail imap 附件下载_Java Mail 发送带有附件的邮件
- Python 中删除文件的几种方法|好用
- 面向流动人口管理的人脸验证系统设计及实现 论文+答辩PPT+项目工程文件
- VIVO X7玫瑰金与银色边框颜色区分 方案(C++实现)
- 虚拟主服务器是什么原因,什么是虚拟主机?