文章目录

  • 字符集
    • 字符集的基本认识
    • 字符集编码和解码

字符集

字符集的基本认识

字符集基础知识

计算机底层不可以直接存储字符的。计算机中底层只能存储二进制(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字符集编码解码详细介绍相关推荐

  1. java url加密解密,java URL 编码解码,该如何解决

    java URL 编码解码 我写了两个接口 一个是对字符串加密 的,一个是解密的  .加密的可以通过调用接口生成加密字符串如下: Oc0PEwKrLzHqT25hYLhWP5wlk5HROPJoWC3 ...

  2. java中char占的二进制,java数据类型与二进制详细介绍

    java数据类型与二进制详细介绍 在java中 Int 类型的变量占 4个字节 Long 类型的变量占8个字节 一个程序就是一个世界,变量是这个程序的基本单位. Java基本数据类型 1. 整数类型 ...

  3. Java Base64 编码解码方案总结

    转载自  Java Base64 编码解码方案总结 Base64是一种能将任意Binary资料用64种字元组合成字串的方法,而这个Binary资料和字串资料彼此之间是可以互相转换的,十分方便.在实际应 ...

  4. Java Scanner类的详细介绍(Java键盘输入)

    Java Scanner类的详细介绍(Java键盘输入) 一.Scanner类的简单使用 二.Scanner类的详细介绍 1.判断输入数据类型 2.next()与nextLine()的区别 3.求多个 ...

  5. Java 字符集编解码及乱码示例

    一.说明 1.字节与位 1个字节是1个byte(B),1个byte是8个bit(位),也就是1个字节=8位 1024个字节是1KB 1.bit 位:位是计算机中存储数据的最小单位,指二进制数中的一个位 ...

  6. java字符集编码_Java字符集编码

    1.概述 在下面的描述中,将以"中文"两个字为例,经查表可以知道其GB2312编码是"d6d0 cec4",Unicode编码为"4e2d 6587& ...

  7. linux java字符集编码_Java字符集编码

    1.  概述 在 下面的描述中,将以"中文"两个字为例,经查表可以知道其GB2312编码是"d6d0 cec4",Unicode编码为"4e2d 65 ...

  8. java字符集编码是,java字符集与编码有关问题

    java字符集与编码问题 没想到自己的第一篇javaeye博客就是让人头痛的java字符集转码问题,下面是我个人的一些认识与网上收集的代码.在java中String在JVM里是unicode的,任何b ...

  9. java chunked编码解码,chunked编码解码实现

    TransferEncoding.java是chunked编码解码实现java代码 import java.io.BufferedReader; import java.io.ByteArrayInp ...

最新文章

  1. contains与compareDocumentPosition方法详解
  2. Tensorflow 加载预训练模型和保存模型
  3. 关于CXF大文件的传输问题
  4. 深入了解epoll 函数
  5. 软件架构(9)---UML 图
  6. SQL数据表字段类型与属性总结(DDL)
  7. windows文件(.txt,.h,.cpp等等)中的中文在ubuntu下乱码的解决方法
  8. 今天来谈谈CSS有哪些布局
  9. netty实战pdf下载,深度解密:Java与线程的关系
  10. centos7.6 安装docker
  11. 用Todd Motto揭秘JavaScript
  12. 搭建fastdfs服务,及单机redis服务,springboot实现h5与fastdfs之间的断点续传,大文件上传,秒传文件和批量上传
  13. 五险一金,你真的懂吗
  14. netcore在Linux后台运行at Interop.ThrowExceptionForIoErrno
  15. DDOS\CC流量攻击
  16. Java实现聊天室(TCP)
  17. 区块链技术天才BM谈EOS
  18. python机票_某哪儿机票JS解密(3)--python调用node产生正确的航线和pre
  19. K_A08_012 基于 STM32等单片机驱动 DRV8833 模块按键控制直流电机正反转
  20. 正n边形的魔法阵,判断该魔法阵消耗的魔力和产生的能量。

热门文章

  1. Mysql5.7安装配置(For Windows)
  2. 将List集合中的符合条件的元素放到List第一个
  3. python读取文件错误解决办法
  4. Github + Picgo + Typora 让笔记远走高飞
  5. 用 Java 实现人脸识别功能(附源码)
  6. Window10 清除应用和功能中的已卸载软件
  7. 连接数据库实现图书管理系统
  8. 写给PM新人的一些建议
  9. 微信公众号自动回复消息如何跳转小程序
  10. 项目治理 vs 组织级项目管理