高阶JAVA篇-深入了解字符集

news2025/7/17 0:07:50

🔥博客主页: 小扳_-CSDN博客
❤感谢大家点赞👍收藏⭐评论✍
 

 

文章目录

       1.0 字符集的说明

        1.1 ASCII  字符集

        1.2 GBK 字符集

        1.3 UTF-8字符集

        2.0 字符集的编码与解码

        2.1 编码提供了常见的方法

        2.2 解码提供了常见的方法


       1.0 字符集的说明

        字符集是一组字符的集合,字符集包括所有可用的字符,包括字母、数字、标点符号、特殊字符和控制字符等。常见的字符集有 ASCII 字符集UTF-8 字符集GBK 字符集等。

        1.1 ASCII  字符集

        它由128个字符组成,包括大写和小写字母、数字、标点符号、特殊字符和控制字符等。ASCII 字符集使用7位二进制数表示每个字符,范围从0到127。

        只用一个字节大小的容量来“装”下这些每一个英文、数字、符号,需要注意的是首位必须为0。

        1.2 GBK 字符集

        GBK 字符集广泛用于中文环境下的计算机系统和软件,包括操作系统、文字处理软件、网页等。GBK 字符集是一种中文字符集,是在  ASCII  字符集基础上或者兼容的前提下,进行扩展的。

        需要重点了解的是,每一个英文和数字、字符都是可以用一个字节大小的容量来“装”下,首位必须为0,对于中文汉字来说,需要每一个字符需要两个字节大小的容量来“装”下这超过21000个汉字和符号,包括繁体字、生僻字和部分其他语种的字符。需要重点注意的是,首位必须为1。

        1.3 UTF-8字符集

        UTF-8 字符集是一种全球通用的字符编码标准,它包含了几乎所有已知的字符,涵盖了世界上所有的语言和符号。UTF-8 字符集的目标是为每个字符提供一个唯一的编码,以便在不同的计算机系统和软件中进行字符的交换和处理。

        UTF-8是一种变长编码方案,使用1到4个字节来表示不同的字符,适用于在互联网上传输和存储文本数据。每个中文的汉字、字符等占三个字节每个英文、数字、符号等占一个字节,在编码或者解码为了区分这些字符不混淆,就会有一定的规则。占一个字节的,首位必须为0占两个字节的,第一个字节首位三个必须为110,第二个字节的首位两个必须为10;占三个字节的,首位四个必须为1110,第二个字节首位两个为10,第三个字节首位两个也为10;占四个字节的,首位五个必须为11110,第二个字节首位两个为10,第三个字节首位两个也为10,第四个字节首位两个也为10。

        小结一下:

        2.0 字符集的编码与解码

        字符集的编码和解码是将字符转换为对应的编码值,或将编码值转换为对应的字符的过程。简单地来说,编码就是将字符转变为编号,这里的编号就是字符集中对应的编码值,而解码就是逆过程,将编号转变为字符

        2.1 编码提供了常见的方法

        使用 getBytes() :默认系统提供的编码集。

        使用 getBytes( String  charsetName) :选择自己想要的编码集。

代码如下:

import java.util.Arrays;

public class characterSet {
    public static void main(String[] args) throws Exception{
        //编码
        String name = new String("a我b");
        //默认系统的提供的字符集进行编码
        byte[] num = name.getBytes();
        System.out.println(Arrays.toString(num));

        //自选的字符集进行编码
        byte[] num1 = name.getBytes("GBK");
        System.out.println(Arrays.toString(num1));
    }
}

运行结果如下:

        2.2 解码提供了常见的方法

        就是用字符串类的构造器,将字节数组放到有参构造器中,就可以得到了相应的字符串了。

        使用:String pass = new String( byte bytes[]),默认系统提供的编码集。

        使用:String pass = new String( byte bytes[], String charsetName),自选编码集。

代码如下:

import java.util.Arrays;

public class characterSet {
    public static void main(String[] args) throws Exception{
        //编码
        String name = new String("a我b");
        //默认系统的提供的字符集进行编码
        byte[] num = name.getBytes();
        System.out.println(Arrays.toString(num));

        //自选的字符集进行编码
        byte[] num1 = name.getBytes("GBK");
        System.out.println(Arrays.toString(num1));

        //解码
        //用系统提供的默认字符集
        String pass = new String(num);
        System.out.println(pass);
        //自己选用想要的字符集
        String pass1 = new String(num1,"GBk");
        System.out.println(pass1);
    }
}

运行结果如下:

        需要重点注意的是,使用了某一套字符集进行编码,那么必须要使用跟编码使用的相同的一套字符集进行解码

代码如下:

import java.io.UnsupportedEncodingException;

public class characterSet {
    public static void main(String[] args) throws UnsupportedEncodingException {
        String name = "李四";
        //这里使用了 UTF-8 这一套字符集进行编码
        byte[] passName = name.getBytes();
        //如果使用 GBK 这一套字符集进行解码的时候会很很大问题
        String newName = new String(passName,"GBK");
        System.out.println(newName);
    }
}

运行结果:

        这里就出现了我不认识的字了,总之,编码与解码都要使用同一套字符集,不然会出现问题。 

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

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

相关文章

【爬虫系统设计系列】模板爬虫的动态配置策略设计与实现

文章目录 1. 写在前面2. 页面配置规划3. 制定模板格式4. 模板引擎实现5. 模板爬虫优势 1. 写在前面 作为一名爬虫开发者来说,涉及数据采集和爬虫开发时,往往都面临着各种挑战。包括技术复杂性、维护成本以及数据源结构的不断变化 早期我们对爬虫开发方式…

【蓝桥杯选拔赛真题45】python调和级数 青少年组蓝桥杯python 选拔赛STEMA比赛真题解析

目录 python调和级数 一、题目要求 1、编程实现 2、输入输出 二、算法分析

众和策略:微软大动作

当地时间周二,美股首要指数全线收涨。但从月度数据来看,美股首要指数录得“三连跌”,10月份,道指跌1.36%,标普500指数跌2.2%,纳指跌2.78%。其间,标普和道指均为2020年3月以来初次呈现三个月连跌…

不容错过的设计软件,产品设计必看

一.图片绘制和处理工具 产品设计很多时候是需要完成产品效果图的相关工作,所以一些图片绘制和处理工具,二维或三维的都需要了解一下。 2D软件: 1、photoshop(PS) AdobePhotoshop,简称“PS这是Adobe开发并发布的一款图片处理软…

innovus: set_ccopt_property的基本用法

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 clock route clock route的net type分为三种,分别是root、trunk和leaf,其中root是指fanout超过routing_top_fanout_count约束的net,leaf是指…

mysql:B+树/事务

B树 : 为了数据库量身定做的数据结构 我们当前这里的讨论都是围绕 mysql 的 innodb 这个存储引擎来讨论的 其他存储引擎可能会用到hash 作为索引,此时就只能应对这种精准匹配的情况了 要了解 B树 我们先了解 B树, B树 是 B树 的改进 B树 有时候会写作 B-树 (这里的" -…

GB28181协议怎样执行保活命令

前言 GB28181协议是视频监控领域的国家标准,本文将解析如何在FFmpeg中增加对GB28181协议的支持,使其可以与支持GB28181协议的设备进行通信与控制,实现设备的注册、保活以及流媒体的传输。 背景介绍 GB28181协议指的是国家标准GB/T 28181—…

自学SLAM(6)相机与图像实践:OpenCV处理图像与图像拼接(点云)

前言 如果写过SLAM14讲第一次的作业,或者看过我之前的运行ORB_SLAM2教程应该都安装过OpenCV了,如果没有安装,没关系,可以看我之前的博客,里面有如何安装OpenCV。 链接: 运行ORB-SLAM2(含OpenCV的安装&…

加强城市内涝积水监测系统建设,提高城市预警功能

近年来,随着城市化进程的不断加快,城市内涝问题愈发凸显,给城市的生命线带来了严重威胁。为了及时掌握城市内涝的情况,保障城市的正常运行,各地纷纷建立了城市内涝监测系统。城市内涝监测系统作为城市生命线的重要组成…

Redis与MySQL的数据情感:延迟双删的秘密揭示

Redis与MySQL的数据情感:延迟双删的秘密揭示 前言第一:mysql与redis数据不一致问题第二:为什么需要双删第三:如何实现延迟双删 前言 在现代应用程序中,MySQL 和 Redis 是两种常用的数据存储解决方案。然而&#xff0c…

金蝶云星空自定义校验器和使用

文章目录 金蝶云星空自定义校验器和使用 金蝶云星空自定义校验器和使用 1、创建类,并继承抽象接口 using Kingdee.BOS.Core; using Kingdee.BOS.Core.Validation; using System;namespace mm.K3.SCM.App.Service.PlugIn.SC.Validator {public class AfterOrderChe…

Python使用got库如何写一个爬虫代码?

got库是一个Python的HTTP库,可以用于爬取网页数据。它提供了简单易用的API,支持异步请求和爬虫IP设置等功能。使用got库进行爬虫开发,可以快速地获取所需数据。下面是使用got库进行爬虫的基本步骤: 1、安装got库:可以使…

如何正确学习中国传统画——画家蒋旗

艺术简介 蒋旗: 师从张建中、张立辰 授教于郭石夫、陈曦林、薛永年、张旭光、乔森、于光华、高卉民、潘晓云 中国书画院院士 清华美院大写意花鸟画高研班助教导师 安徽美术家协会会员 泗县美术家协会副主席 青藤画社社长。 在艺术多元发展的当下&#xff0c…

【23真题】Top3简单专业课似双非!

今天分享的是23年复旦大学957的信号与系统试题及解析。 本套试卷难度分析:这套卷子平均分为120左右,最高分145分。22年复旦大学957信号与系统,我也发布过,若有需要戳这里自取!本套试题内容难度中等偏下,说…

AutoGen完整教程和加载本地LLM示例

Autogen是一个卓越的人工智能系统,它可以创建多个人工智能代理,这些代理能够协作完成任务,包括自动生成代码,并有效地执行任务。 在本文中,我们将深入探讨Autogen,并介绍如何让AutoGen使用本地的LLM Auto…

山西电力市场日前价格预测【2023-11-02】

日前价格预测 预测说明: 如上图所示,预测明日(2023-11-02)山西电力市场全天平均日前电价为151.67元/MWh。其中,最高日前电价为280.23元/MWh,预计出现在22:15。最低日前电价为0.00元/MWh,预计出…

编程助手DevChat:让开发更轻松

#AI编程助手哪家好?DevChat“真”好用 # 目录 前言一、安装Vscode1、下载链接2、安装 二、注册DevChat1、打开注册页2、验证成功完成邮箱绑定3、绑定微信可获得8元 三、安装插件四、配置Access Key1、获取Access Key2、设置Access Key①、点击左下角管理&#xff08…

(五)库存超卖案例实战——使用zookeeper分布式锁解决“超卖”问题

前言 本节内容使用zookeeper实现分布式锁,完成并发访问“超卖”问题的解决。相对于redis分布式锁,zookeeper能够保证足够的安全性。关于zookeeper的安装内容这里不做介绍,开始本节内容之前先自行安装好zookeeper中间键服务。这里我们利用创建…

Redis与Mysql的数据一致性(双写一致性)

双写一致性:当修改了数据库的数据也要同时的更新缓存的数据,使缓存和数据库的数据要保持一致。 一般是在写数据的时候添加延迟双删的策略 先删缓存 再修改数据 延迟一段时间后再次删除缓存 这种方式其实不是很靠谱 一致性要求高 共享锁:读…

Leetcode刷题---删除有序数组中的重复项 II(双指针问题)

题目描述: 题目中已经给出该数组是一个升序的数组。要求数组中最多出现两个相同的元素,而且不能使用额外的存储空间,并且将新的数组的长度返回。 解题思想: 该题可以使用双指针来解决,我们可以定义一个快指针和一个…