弄清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。
弄清java中的字节与字符的更多相关文章
- Java中的字节,字符与编码,解码
ASCII编码 ASCII码主要是为了表示英文字符而设计的,ASCII码一共规定了128个字符的编码(0x00-0x7F),只占用了一个字节的后面7位,最前面的1位统一规定为0. ISO-8859-1 ...
- Java中的字节输入出流和字符输入输出流
Java中的字节输入出流和字符输入输出流 以下哪个流类属于面向字符的输入流( ) A BufferedWriter B FileInputStream C ObjectInputStream D In ...
- c#与java中byte字节的区别及转换方法
原文:c#与java中byte字节的区别及转换方法 在java中 byte的范围在 [-128,127] 在C#中 byte的范围在 [0,255] 所以 java程序与C#程序 进行数据传输的时 ...
- java中全角半角字符的相互转换的代码
如下内容是关于java中全角半角字符的相互转换的内容.package com.whatycms.common.util; import org.apache.commons.lang.StringUt ...
- java位 、字节 、字符的梳理
1字节(byte)=8位(bit) char=2字节(这是因为char是Java中的保留字,Java用的是Unicode,所以char在Java中是16位即2个字节的.) 附: String str= ...
- Java中的流(3)字符流-Reader和Writer
java中提供了处理以16位的Unicode码表示的字符流的类,即以Reader和Writer 为基类派生出的一系列类. 1.Reader和Writer 这两个类是抽象类,只是提供了一系列用于字符 ...
- Java中根据字节截取字符串
一.简介 为了统一世界各国的字符集,流行开了Unicode字符集,java也支持Unicode编码,即java中char存的是代码点值,即无论是‘A’还是‘中’都占两个字节. 代码点值:与Unicod ...
- Java中二进制字节与十六进制互转
在Java中字节与十六进制的相互转换主要思想有两点: 1.二进制字节转十六进制时,将字节高位与0xF0做"&"操作,然后再左移4位,得到字节高位的十六进制A;将字节低位与0 ...
- Java中如何输入一个字符
今天在QQ群上看见有人问如何在Java中输入一个字符的问题. 查了下有以下三种方法吧: char c = new java.util.Scanner(System.in).next().charAt( ...
随机推荐
- 《c程序设计语言》读书笔记-3.4-数字转字符串
#include <io.h> #include <stdio.h> #include <string.h> #include <stdlib.h> # ...
- Python常用工具PyCharm
PyCharm 是我用过的python编辑器中,比较顺手的一个.而且可以跨平台,在macos和windows下面都可以用,这点比较好. 首先预览一下 PyCharm 在实际应用中的界面:(更改了PyC ...
- Html5学习进阶二 画布
canvas 元素用于在网页上绘制图形. 什么是 Canvas? HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像. 画布是一个矩形区域,您可以控制其每一像素. canv ...
- Mac下Lua环境搭建
lua源文件下载安装 到官网安装了lua包,我安装的是 lua-5.3.1 解压之后,命令行cd进入到src目录下,输入make macosx 完成后cd ..到上一层目录, 输入sudo make ...
- Centos 查看内存
1. 查看内存使用 free -mh 2. 读出的内核信息进行解释 cat /proc/meminfo MemTotal: kB #所有可用RAM大小 (即物理内存减去一些预留位和内核的二进制代码大小 ...
- 1.使用python连接odps并获取项目
from odps import ODPS # 直接从odps模块导入ODPS这个类 # 然后传入相应的参数进行初始化即可 ''' ODPS函数接收的参数如下: access_id: 你的access ...
- 解决:eclipse 断点调试进入到class文件,无法查看变量值问题
今天团队一小伙伴调试项目时,一不小心选错了源文件目录(maven分模块项目),选到了顶层父项目下的文件,结果调试时发现无法查看调试过程中的变量值,要解决这个问题,其实很简单,稍稍配置一下就可以了,为了 ...
- hdu 5086(递推)
Revenge of Segment Tree Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/ ...
- Android 横向列表GridView 实现横向滚动
Android 横向列表实现,可左右滑动,如下图 1.主界面布局代码:activity_main.xml a.包裹HorizontalScrollView控件是GirdView横向滚动的基本条件b.G ...
- 修改SVN路径
由于服务器IP更换,所以SVN的路径也就更换了. 更换SVN路径的做法是: 选中SVN checkout的文件夹,右键选择TortoiseSVN的relocate.注意要选择checkout的根目录, ...