Java字符集编码解码详细介绍
文章目录
- 字符集
- 字符集的基本认识
- 字符集编码和解码
字符集
字符集的基本认识
字符集基础知识
计算机底层不可以直接存储字符的。计算机中底层只能存储二进制(0、1)
二进制是可以转换成十进制的
计算机底层可以表示十进制编号。计算机可以给人类字符进行编号存储,这套编号规则就是字符集。
ASCII字符集:
ASCII(American Standard Code for Information Interchange,美国信息交换标准代码):包括了数字、英文、符号。
ASCII使用1个字节存储一个字符,一个字节是8位,总共可以表示128个字符信息,对于英文,数字来说是够用的。
例如:
- 01100001 = 97 => a
- 01100010 = 98 => b
GBK:
window系统默认的码表。兼容ASCII码表,也包含了几万个汉字,并支持繁体汉字以及部分日韩文字。
注意:GBK是中国的码表,一个中文以两个字节的形式存储。但不包含世界上所有国家的文字。
Unicode码表:
unicode(又称统一码、万国码、单一码)是计算机科学领域里的一项业界字符编码标准。
容纳世界上大多数国家的所有常见文字和符号。
由于Unicode会先通过UTF-8,UTF-16,以及 UTF-32的编码成二进制后再存储到计算机,其中最为常见的就是UTF-8。
注意:
Unicode是万国码,以UTF-8编码后一个中文一般以三个字节的形式存储。
UTF-8也要兼容ASCII编码表。
技术人员都应该使用UTF-8的字符集编码。
编码前和编码后的字符集需要一致,否则会出现中文乱码。
汉字存储和展示过程解析:
小结 :
字符串常见的字符底层组成
英文和数字等在任何国家的字符集中都占1个字节
GBK字符中一个中文字符占2个字节
UTF-8编码中一个中文1般占3个字节
字符串常见的字符底层组成要求
必须一致,否则会出现中文字符乱码
英文和数字在任何国家的编码中都不会乱码
字符集编码和解码
String编码:
方法名称 | 说明 |
---|---|
byte[] getBytes() | 使用平台的默认字符集将该String编码为一系列字节,将结果存储到新的字节数组中 |
byte[] getBytes(String charsetName) | 使用指定的字符集将该String编码为一系列字节,将结果存储到新的字节数组中 |
编码示例代码
public static void main(String[] args) {String name = "学习Java";// 使用默认字符集(UTF-8)进行编码byte[] bytes = name.getBytes();System.out.println(Arrays.toString(bytes)); // [-27, -83, -90, -28, -71, -96, 74, 97, 118, 97]
}
public static void main(String[] args) throws UnsupportedEncodingException {String name = "学习Java";// 指定字符集(GBK)进行编码byte[] bytes = name.getBytes("GBK");System.out.println(Arrays.toString(bytes)); // [-47, -89, -49, -80, 74, 97, 118, 97]
}
String解码:
构造器 | 说明 |
---|---|
String(byte[] bytes) | 通过使用平台的默认字符集解码指定的字节数组来构造新的 String |
String(byte[] bytes, String charsetName) | 通过指定的字符集解码指定的字节数组来构造新的 String |
解码实例代码
注意编码和解码的字符集必须一致, 否则会乱码
默认UTF-8解码
public static void main(String[] args) throws UnsupportedEncodingException {String name = "学习Java";// 编码byte[] bytes = name.getBytes();System.out.println(Arrays.toString(bytes)); // [-27, -83, -90, -28, -71, -96, 74, 97, 118, 97]// 解码String newName = new String(bytes);System.out.println(newName); // 学习Java
}
指定GBK解码
public static void main(String[] args) throws UnsupportedEncodingException {String name = "学习Java";// 编码byte[] bytes = name.getBytes("GBk");System.out.println(Arrays.toString(bytes)); // [-47, -89, -49, -80, 74, 97, 118, 97]// 解码String newName = new String(bytes, "GBK");System.out.println(newName); // 学习Java
}
Java字符集编码解码详细介绍相关推荐
- java url加密解密,java URL 编码解码,该如何解决
java URL 编码解码 我写了两个接口 一个是对字符串加密 的,一个是解密的 .加密的可以通过调用接口生成加密字符串如下: Oc0PEwKrLzHqT25hYLhWP5wlk5HROPJoWC3 ...
- java中char占的二进制,java数据类型与二进制详细介绍
java数据类型与二进制详细介绍 在java中 Int 类型的变量占 4个字节 Long 类型的变量占8个字节 一个程序就是一个世界,变量是这个程序的基本单位. Java基本数据类型 1. 整数类型 ...
- Java Base64 编码解码方案总结
转载自 Java Base64 编码解码方案总结 Base64是一种能将任意Binary资料用64种字元组合成字串的方法,而这个Binary资料和字串资料彼此之间是可以互相转换的,十分方便.在实际应 ...
- Java Scanner类的详细介绍(Java键盘输入)
Java Scanner类的详细介绍(Java键盘输入) 一.Scanner类的简单使用 二.Scanner类的详细介绍 1.判断输入数据类型 2.next()与nextLine()的区别 3.求多个 ...
- Java 字符集编解码及乱码示例
一.说明 1.字节与位 1个字节是1个byte(B),1个byte是8个bit(位),也就是1个字节=8位 1024个字节是1KB 1.bit 位:位是计算机中存储数据的最小单位,指二进制数中的一个位 ...
- java字符集编码_Java字符集编码
1.概述 在下面的描述中,将以"中文"两个字为例,经查表可以知道其GB2312编码是"d6d0 cec4",Unicode编码为"4e2d 6587& ...
- linux java字符集编码_Java字符集编码
1. 概述 在 下面的描述中,将以"中文"两个字为例,经查表可以知道其GB2312编码是"d6d0 cec4",Unicode编码为"4e2d 65 ...
- java字符集编码是,java字符集与编码有关问题
java字符集与编码问题 没想到自己的第一篇javaeye博客就是让人头痛的java字符集转码问题,下面是我个人的一些认识与网上收集的代码.在java中String在JVM里是unicode的,任何b ...
- java chunked编码解码,chunked编码解码实现
TransferEncoding.java是chunked编码解码实现java代码 import java.io.BufferedReader; import java.io.ByteArrayInp ...
最新文章
- contains与compareDocumentPosition方法详解
- Tensorflow 加载预训练模型和保存模型
- 关于CXF大文件的传输问题
- 深入了解epoll 函数
- 软件架构(9)---UML 图
- SQL数据表字段类型与属性总结(DDL)
- windows文件(.txt,.h,.cpp等等)中的中文在ubuntu下乱码的解决方法
- 今天来谈谈CSS有哪些布局
- netty实战pdf下载,深度解密:Java与线程的关系
- centos7.6 安装docker
- 用Todd Motto揭秘JavaScript
- 搭建fastdfs服务,及单机redis服务,springboot实现h5与fastdfs之间的断点续传,大文件上传,秒传文件和批量上传
- 五险一金,你真的懂吗
- netcore在Linux后台运行at Interop.ThrowExceptionForIoErrno
- DDOS\CC流量攻击
- Java实现聊天室(TCP)
- 区块链技术天才BM谈EOS
- python机票_某哪儿机票JS解密(3)--python调用node产生正确的航线和pre
- K_A08_012 基于 STM32等单片机驱动 DRV8833 模块按键控制直流电机正反转
- 正n边形的魔法阵,判断该魔法阵消耗的魔力和产生的能量。