java 一个汉字等于几个空格_java梳理-一个汉字占多大空间
ASCII 码
学过计算机的人都知道 ASCII 码。总共同拥有 128 个,用一个字节的低 7 位表示,0~31 是控制字符如换行回车删除等。32~126 是打印字符。能够通过键盘输入并且能够显示出来。这128个符号(包括32个不能打印出来的控制符号),仅仅占用了一个字节的后面7位,最前面的1位统一规定为0。ISO-8859-1
128 个字符显然是不够用的,于是 ISO 组织在 ASCII 码基础上又制定了一些列标准用来扩展 ASCII 编码,它们是 ISO-8859-1~ISO-8859-15。当中 ISO-8859-1 涵盖了大多数西欧语言字符,全部应用的最广泛。ISO-8859-1 仍然是单字节编码,它总共能表示 256 个字符。GB2312
它的全称是《信息交换用汉字编码字符集 基本集》。它是双字节编码,总的编码范围是 A1-F7,当中从 A1-A9 是符号区,总共包括 682 个符号,从 B0-F7 是汉字区,包括 6763 个汉字。GBK
全称叫《汉字内码扩展规范》。是国家技术监督局为 windows95 所制定的新的汉字内码规范,它的出现是为了扩展 GB2312,增加很多其它的汉字,它的编码范围是 8140~FEFE(去掉 XX7F)总共同拥有 23940 个码位,它能表示 21003 个汉字,它的编码是和 GB2312 兼容的,也就是说用 GB2312 编码的汉字能够用 GBK 来解码,并且不会有乱码。UTF-16
说到 UTF 必须要提到 Unicode(Universal Code 统一码),ISO 试图想创建一个全新的超语言字典。世界上全部的语言都能够通过这本字典来相互翻译。
可想而知这个字典是多么的复杂,关于 Unicode 的具体规范能够參考相应文档。
Unicode 是 Java 和 XML 的基础,以下具体介绍 Unicode 在计算机中的存储形式。须要注意的是,Unicode仅仅是一个符号集,它仅仅规定了符号的二进制代码,却没有规定这个二进制代码应该怎样存储。
比方,汉字"严"的unicode是十六进制数4E25,转换成二进制数足足有15位(100111000100101)。也就是说这个符号的表示至少须要2个字节。表示其它更大的符号,可能须要3个字节或者4个字节。甚至很多其它。
UTF-16 具体定义了 Unicode 字符在计算机中存取方法。UTF-16 用两个字节来表示 Unicode 转化格式。这个是定长的表示方法,任何字符都能够用两个字节表示,两个字节是 16 个 bit,所以叫 UTF-16。UTF-16 表示字符非常方便。每两个字节表示一个字符,这个在字符串操作时就大大简化了操作。这也是 Java 以 UTF-16 作为内存的字符存储格式的一个非常重要的原因。UTF-8
UTF-16 统一採用两个字节表示一个字符,尽管在表示上非常easy方便,可是也有其缺点,有非常大一部分字符用一个字节就能够表示的如今要两个字节表示,存储空间放大了一倍,在如今的网络带宽还非常有限的今天。这样会增大网络传输的流量,并且也不是必需。而 UTF-8 採用了一种变长技术,每个编码区域有不同的字码长度。
不同类型的字符能够是由 1~6 个字节组成。
UTF-8 有以下编码规则:
假设一个字节,最高位(第 8 位)为 0,表示这是一个 ASCII 字符(00 - 7F)。
可见。全部 ASCII 编码已经是 UTF-8 了。
假设一个字节。以 11 开头,连续的 1 的个数暗示这个字符的字节数,比如:110xxxxx 代表它是双字节 UTF-8 字符的首字节。
反复一遍,这里的关系是,UTF-8是Unicode的实现方式之中的一个。
下表总结了编码规则,字母x表示可用编码的位。
Unicode符号范围 | UTF-8编码方式(十六进制) | (二进制)
--------------------+---------------------------------------------
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
在 Java 开发中除了 I/O 涉及到编码外。最经常使用的应该就是在内存中进行字符到字节的数据类型的转换。
上面介绍了常见的编码格式,以下结合样例看看java中编解码方式:
我们一汉字“严”为例进行測试。
public class LengthTest {
public static void main(String[] args) throws Exception{
String name = "严";
byte[] utf8 = name.getBytes("UTF-8");
System.out.println(utf8.length);
System.out.print("UTF8:");toHex(utf8);
byte[] gbk = name.getBytes("GBK");
System.out.print("GBK:");toHex(gbk);
String unicodeStr =Integer.toHexString("严".charAt(0) );
System.out.println("unicode:"+unicodeStr); //
//unicode转汉字
StringBuffer sb = new StringBuffer();
String str[] = unicodeStr.toUpperCase().split("U");
for(int i=0;i
if(str[i].equals("")) continue;
char c = (char)Integer.parseInt(str[i].trim(),16);
sb.append(c);
}
System.out.println(sb.toString());
}
public static void toHex(byte[] b) {
for (int i = 0; i < b.length; i++) {
System.out.printf("%x " , b[i]);
}
System.out.println();
}
}
我们把 name 字符串依照前面说的几种编码格式进行编码转化成 byte 数组,然后以 16 进制输出,我们先看一下 Java 是怎样进行编码的。
java 一个汉字等于几个空格_java梳理-一个汉字占多大空间相关推荐
- java 用户线程如何修改界面内容_java 加入一个线程、创建有响应的用户界面 。 示例代码...
javajava 加入一个线程.创建有响应的用户界面 . 示例代码 来自thinking in java 4 21章 部分代码 目录21.2.11 package org.rui.thread.con ...
- java中不等于空怎么写_JAVA判断不等于空的情况
判断不等于空的情况,千万不要搞混淆. if(orderId != null && !"".equals(orderId)) 中间不是||的关系,是&&am ...
- java 遍历出d盘所有文件_JAVA遍历一个文件夹中的所有文件
JAVA遍历一个文件夹中的所有文件 在实际项目中给定一文件夹,得到这个文件夹下所有的文件这样的需求并不是很多,更多的是查找或是删除某一具体的文件 import java.io.File; import ...
- java语言的三个版本是_Java是一个全面且功能强大的语言,可用于多种用途。Java有三个版本分别是:_学小易找答案...
[单选题]电路如图所示,电路中包含的网孔个数为( ). [单选题]各点电位的高低是()的,而两点之间的电压值是()的. [单选题]研究发现,影响睡眠障碍的生物学因素与非生物学因素(). [单选题]1 ...
- java一个类添加多个接口_Java的一个类可以实现多个接口。
Java的一个类可以实现多个接口. 答:√ 下列原始凭证中属于一次凭证的有( ). 答: 收据 收料单 完全角化细胞在显微镜下不可能出现的颜色是 答:白色 In a language classroo ...
- java中怎么让一个数倒转_java 输入一个数字,反转输出这个数字的值(实现方法)
java 输入一个数字,反转输出这个数字的值(实现方法) 如下所示: package 第四天; import java.util.Scanner; public class 数字反转 { public ...
- Java建造圆判断是否在园内_java – 查找一个圆圈是否在另一个圆圈内
我有点麻烦我有一个任务,要求我找到一个第二个圆是否重叠,内部或第二个圈子.但是,我无法检查重叠,如果第二个圆圈在第一个圆圈内. (使用的变量是x1,x2,y1,y2,r1,r2,distance) 这 ...
- java 实现按规则自增功能_java运算符详解 - osc_74vaali6的个人空间 - OSCHINA - 中文开源技术交流社区...
java基础(2)--运算符详解 自增自减规则 自增自减就是常用的 a = a++ 或者 a = ++a;前者是后缀式,先把a赋值给a,再加一:后者是后缀式,先加一,在赋值给a;而且a++,++a并不 ...
- java的max函数比较三个数_java – 使用泛型创建返回较大函数的max函数
在Java中,我如何使用泛型来创建一个max函数,该函数将两个相同类型的Comparable对象作为参数并返回较大的对象? 我试过了: public static T max(T obj1, T ob ...
最新文章
- QCon2016旧金山大会焦点分享者确认
- Exchange Server 2010 全新部署篇八:CASHUB中集线器配置部分
- JUC并发编程八 并发架构--park,unpark
- Anaconda python3.6版本下载
- php面试题接口方面,php面试题6 - osc_xb4v1nhl的个人空间 - OSCHINA - 中文开源技术交流社区...
- 全面支持3.0 新华三“力夯”可信计算发展
- hdu4417(Super Mario)—— 二分+划分树
- webRTC之智能指针std::unique_ptr::reset()使用(十四)
- 将ClearCase的客户端编码设置为UTF-8
- 萌新卷妹带你逃出算法无名岛第六站
- TPS54231DR IC REG BUCK ADJUSTABLE 2A 8SOIC
- JAVA中implement和extends的区别?
- 关于LCD1602单独清除某一行的问题
- 最新版谷歌浏览器更新后下载时奔溃
- 求频率的公式是什么计算机,cpu时钟频率计算公式_CPU频率计算方法详解
- C语言编程笔试题(一)
- 主流相机镜头分析与代表作
- 亚马逊AWS学习——多网络接口下配置EC2实例连接公网的一个“bug”
- plupload上传文件碰到的问题
- 史上最全的免费开源ERP Odoo14产品档案设置应用教程