Java——IO流(一)-(4/8):前置知识-字符集、UTF-8、GBK、ASCII、乱码问题、编码和解码等

目录

常见字符集介绍

标准ASCII字符集

 GBK(汉字内码扩展规范,国标)

Unicode字符集(统一码,万国码)

小结

字符集的编码、解码操作

方法

实例演示


常见字符集介绍

标准ASCII字符集

  • ASCll(American Standard Code for Information Interchange):美国信息交换标准代码,包括了英文、符号等。
  • 标准ASCII使用1个字节存储一个字符,首尾是0,总共可表示128个字符。

包含了:英文字母(大小写)、数字、标点符号、特殊字符。

使用一个字节来存储。

这个字符集在美国在足够使用了,但是计算机不仅仅只在一个国家流通,我们国家的汉字就比字符多出很多很多,一个字节是完全不够表示完全的,于是就出现了GBK。

 GBK(汉字内码扩展规范,国标)

  • 汉字编码字符集,包含了2万多个汉字等字符,GBK中一个中文字符编码成两个字节的形式存储
  • 注意:GBK兼容了ASCII字符集。

假设要编码:我a你

为了解码,GBK规定:汉字的第一个字节第一位必须是1.

看完了中文的字符集,接下来要再讲其他语言的字符集吗?

例如:巴基斯坦码、迪拜码、岛国码、韩文码、乌兹别克斯坦码、吉尔吉斯斯坦码、哈萨克斯坦码等等。

显然是不太可能的,于是国际组织就制定了统一的一个字符集。

Unicode字符集(统一码,万国码)

  • Unicode是国际组织制定的,可以容纳世界上所有文字、符号的字符集。

其中,Unicode字符集里面的UTF-32编码方案就是使用四个字节表示一个字符,直接兼容几乎所有语言的字符;但是这种方式是十分奢侈的,很占存储空间,导致通信效率变低!

而UTF-8的出现让效率得到了大提升

UTF-8

  • 是Unicode字符集的一种编码方案,采取可变长编码方案,共分四个长度区:1个字节,2个字节,3个字节,4个字节
  • 英文字符、数字等只占1个字节(兼容标准ASCII编码),汉字字符占用3个字节
UTF-8编码方式(二进制)
0xxxxxxx(ASCII码)
110xxxxx 10xxxxxx
1110xxxx 10xxxxxx 10xxxxxx
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

注意:技术人员在开发时都应该使用UTF-8编码!

小结

  • ASCII字符集:只有英文、数字、符号等,占1个字节
  • GBK字符集:汉字占2个字节,英文、数字占1个字节
  • UTF-8字符集:汉字占3个字节,英文、数字占1个字节

注意1:字符编码时使用的字符集,和解码时使用的字符集必须一致,否则会出现乱码

注意2:英文,数字一般不会乱码,因为很多字符集都兼容了ASCII编码。

字符集的编码、解码操作

  • 编码:把字符按照制定字符集编码成字节。
  • 解码:把字节按照制定字符集解码成字符。

方法

Java代码完成对字符的编码

String提供了如下方法说明
byte[] getBytes()使用平台的默认字符集将该String编码为一系列字节,将结果存储到新的字节数组中
byte[] getBytes(String charsetName)使用指定的字符集将该String编码为一系列字节,将结果存储到新的字节数组中

Java代码完成对字符的解码

String提供了如下方法说明
String(byte[] bytes)通过使用平台的默认字符集解码指定的字节数组来构造新的String
String(byte[] bytes, String charsetName)通过指定的字符集解码指定的字节数组来构造新的String

实例演示

public class CodeTest1 {public static void main(String[] args) throws Exception {//1.编码String data = "a我b";byte[] bytes = data.getBytes();     //默认是按照平台字符集(UTF-8)进行编码的。System.out.println(Arrays.toString(bytes));//按照制定字符集进行编码byte[] bytes1 = data.getBytes("GBK");System.out.println(Arrays.toString(bytes1));//2.解码String s1 = new String(bytes);      //按照平台默认编码(UTF-8)解码System.out.println(s1);String s2 = new String(bytes1);System.out.println(s2);             //乱码}
}

 运行结果:

解决乱码:

运行结果:


END


学习自:黑马程序员——Java课程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/26740.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java如何根据对象属性值从对象列表中获取满足条件的对象

实现方式 在java 中,根据对象属性值从对象列表中获取满足条件的对象,可以使用以下2种方法: 使用循环遍历: 手动遍历列表。 使用流(Streams)API: 利用 Java 8 引入的 Streams 来简化代码。 示…

Sklearn中逻辑回归建模

分类模型的评估 回归模型的评估方法,主要有均方误差MSE,R方得分等指标,在分类模型中,我们主要应用的是准确率这个评估指标,除此之外,常用的二分类模型的模型评估指标还有召回率(Recall&#xff…

Golang | Leetcode Golang题解之第150题逆波兰表达式求值

题目: 题解: func evalRPN(tokens []string) int {stack : make([]int, (len(tokens)1)/2)index : -1for _, token : range tokens {val, err : strconv.Atoi(token)if err nil {indexstack[index] val} else {index--switch token {case ""…

Maven 核心插件 maven-resources-plugin 使用详解

Maven 核心插件 maven-resources-plugin 负责处理项目中的资源文件。它的主要功能是将资源从源目录(如 src/main/resources)复制到目标目录(如 target/classes),并在此过程中进行必要的过滤和替换操作,如替…

PCL 低阶多项式求解

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 这里使用C++实现对二阶和三阶多项式的求解过程(求解多项式的根),其推导过程网上有很多,这里就不多叙述了。 二、实现代码 RootsPolynomial.h #pragma once#include <algorithm> #include <cstdint>…

LeetCode题解:2303. 计算应缴税款总额,JavaScript,详细注释

原题链接&#xff1a; https://leetcode.cn/problems/calculate-amount-paid-in-taxes/ 解题思路&#xff1a; 该题的目标是把收入分层几个区间&#xff0c;每个区间内部的金额单独计算纳税额以[[3,50],[7,10],[12,25]]为例&#xff0c;该题要计算的分别是&#xff1a; [0, 3…

MATLAB神经网络---regressionLayer回归输出层

回归输出层regressionLayer 回归层计算回归任务的半均方误差损失。 Matlab中的regressionLayer函数是一个深度学习工具箱中的函数,用于定义回归问题的损失函数层。它可用于神经网络模型的最后一层&#xff0c;将预测值与目标值进行比较,并计算出损失值。 语法 layer regre…

WPF学习(3)--不同类通过接口实现同种方法

一、接口概述 1.接口的概念 在C#中&#xff0c;接口&#xff08;interface&#xff09;是一种引用类型&#xff0c;它定义了一组方法、属性、事件或索引器&#xff0c;但不提供实现。接口只定义成员的签名&#xff0c;而具体的实现由实现接口的类或结构体提供。接口使用关键字…

MySQL备份与恢复:确保数据的安全与可靠性

引言: 数据的安全性和可靠性的重要性 在现代企业和组织中,数据已经成为了最重要的资产之一。数据的安全性和可靠性对于企业的运营至关重要。首先,数据的安全性保证了敏感信息不会落入错误的手中,防止了潜在的经济损失和法律风险。其次,数据的可靠性则确保了企业能够准确…

AI学习指南机器学习篇-支持向量机超参数调优

AI学习指南机器学习篇-支持向量机超参数调优 在机器学习领域中&#xff0c;支持向量机&#xff08;Support Vector Machines&#xff0c;SVM&#xff09;是一种非常常用的监督学习模型。它通过寻找一个最优的超平面来进行分类和回归任务。然而&#xff0c;在实际应用中&#x…

数据赋能(118)——体系:数据收集——技术方法、主要工具

技术方法 数据收集的技术方法多种多样&#xff0c;以下是一些主要的技术手段&#xff1a; 网络爬虫&#xff1a;这是一种自动化程序&#xff0c;能够遍历互联网上的网页并提取所需信息。网络爬虫可以有效地收集大规模的结构化和非结构化数据&#xff0c;为后续的数据分析和挖…

【Go】使用Go语言实现AES CBC No Padding加密和解密

冷雨悄悄停吧 天真的心因为你 那管多风雨天仍和你一起 告诉你我其实多么的想你 其实我我真的爱着你 &#x1f3b5; 蒋明周《真的爱着你》 引言 高级加密标准&#xff08;AES&#xff09;是一种广泛使用的加密算法。它可以工作在多种模式下&#xff0c;最…

Cesium4Unreal - # 009 直接加载显示shapefile

文章目录 直接加载显示shapefile1 思路2 步骤2.1 下载shapelib2.2 添加依赖模块2.3 创建Actor2.3.1 MyShapeLoaderActor.h2.3.2 MyShapeLoaderActor.cpp2.3 蓝图代码直接加载显示shapefile 1 思路 在Unreal Engine中加载显示shapefile无非就是从shapefile中读取几何数据,并且…

【车载音视频电脑】嵌入式AI分析车载DVR,支持8路1080P

产品特点 采用H.265 & H.264编解码&#xff0c;节约存储空间、传输流量&#xff1b; 高分辨率&#xff1a;支持8路1080P*15FPS/4路1080P*30FPS、720P、D1等编解码&#xff1b; 支持1张SATA硬盘&#xff0c;取用方便&#xff0c;满足大容量存储要求&#xff1b; 支持1个…

ChatGPT中文镜像网站分享

ChatGPT 是什么&#xff1f; ChatGPT 是 OpenAI 开发的一款基于生成预训练变换器&#xff08;GPT&#xff09;架构的大型语言模型。主要通过机器学习生成文本&#xff0c;能够执行包括问答、文章撰写、翻译等多种文本生成任务。截至 2023 年初&#xff0c;ChatGPT 的月活跃用户…

神经网络介绍及教程案例

神经网络介绍及教程&案例 神经网络&#xff08;Neural Networks&#xff09;是机器学习和人工智能中的一种关键技术&#xff0c;模仿了人类大脑的工作方式&#xff0c;能够处理复杂的数据和任务。以下是神经网络的一些基础介绍&#xff1a; 基本概念 神经元&#xff08;N…

12.实战私有数据微调ChatGLM3

实战私有数据微调ChatGLM3 实战私有数据微调ChatGLM3实战构造私有的微调数据集基于 ChatGPT 设计生成训练数据的 Prompt使用 LangChain GPT-3.5-Turbo 生成训练数据样例训练数据解析、数据增强和持久化存储自动化批量生成训练数据集流水线提示工程&#xff08;Prompt Engineer…

OpenCV读取图片

import cv2 as cv # 读取图像 image cv.imread(F:\\mytupian\\xihuduanqiao.jpg) # 创建窗口 cv.namedWindow(image, cv.WINDOW_NORMAL) #显示图像后&#xff0c;允许用户随意调整窗口大小 # 显示图像 cv.imshow(image, image) cv.waitKey(0)import cv2 as cv srccv.imread(…

Java常用的设计模式,如单例模式、工厂模式、观察者模式等

设计模式是软件工程中的一种解决方案&#xff0c;用于应对常见的设计问题和挑战。它们提供了一种标准化的方式来解决设计难题&#xff0c;使代码更加灵活、可扩展和易于维护。 单例模式&#xff08;Singleton Pattern&#xff09; 概述 单例模式确保一个类只有一个实例&…

代码随想录算法训练营第37天 [ 435. 无重叠区间 763.划分字母区间 56. 合并区间 738.单调递增的数字 ]

代码随想录算法训练营第37天 [ 435. 无重叠区间 763.划分字母区间 56. 合并区间 738.单调递增的数字 ] 一、435. 无重叠区间 链接: 代码随想录. 思路&#xff1a;更新区间的值 做题状态&#xff1a;看解析后做出来了 class Solution { public:static bool cmp(vector<int>…