首页 > 其他分享 >字符集的一些疑惑

字符集的一些疑惑

时间:2022-11-18 12:01:41浏览次数:50  
标签:疑惑 字节 bytes 字符集 GBK 一些 ASCII String

标准ASCII字符集

计算机由美国人发明,所以要存储英文字母,数字,标点符号,于是进行编号,产生ASCII字符集,0-127,使用1个字节存储

GBK

但是中文有很多,于是产生了GBK(汉字编码字符集),包含2W多个汉字等字符,GBK中一个中文字符编码用两个字节存储

注:GBK兼容了ASCII字符集

我a你 表示为 xxxxxxxx xxxxxxxx 0xxxxxxx xxxxxxx xxxxxxxxx ,计算机如何识别

GBK规定:汉字的第一个字节必须为1,来进行区别

Unicode字符集

一个国家有一个字符集的话,传输会有问题

国际组织制定了统一码:下面的两种方案

UTF-32 :4个字节标识一个字符,太过浪费,且效率变低

UTF-8:可变长编码方案,共分为四个长度区:1个字节,2个字节,3个字节,4个字节

英文字符,数字等占一个字节(兼容ASCII编码),汉字字符占用3个字节

a我m 0xxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx 0xxxxxxx 如何识别

a 97 01100001

我 25105 110 001000 010001

m 109 01101101

解决方案:

0xxxxxxx (ASCII码)
110xxxxx 10xxxxxx
1110xxxx 10xxxxxx 10xxxxxx
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

总结

字符编码时所使用的字符集,和解码时使用的字符集必须一致,否则会乱码

英文,数字一般不会乱码,因为很多字符集都兼容ASCII编码

使用Java程序对字符进行编码,解码

编码

String提供如下方法 说明
byte[] getBytes() 使用平台默认字符集将String编码为字节,结果存储到新的字节数组中
byte[] getBytes(String charsetName) 使用指定的字符集将String编码为字节,结果存储到新的字节数组中
//默认字符集
String data = “a我m”;
byte[] bytes2 =data.getBytes();
System.out.println(Arrays.toString(bytes));

//指定字符集
String data = “a我m”;
byte[] bytes2 =data.getBytes(“GBK”);
System.out.println(Arrays.toString(bytes));

解码

String提供如下方法 说明
string(byte[] bytes) 使用平台默认的字符集解码指定的字节数组来构造String
string(byte[] bytes, String charsetName) 使用指定的字符集解码指定的字节数组来构造String
//默认字符集
string s1 = new String(bytes);
   
//指定字符集
string s1 = new String(bytes,"GBK");

标签:疑惑,字节,bytes,字符集,GBK,一些,ASCII,String
From: https://www.cnblogs.com/gk0d/p/16890478.html

相关文章

  • [Swift] SwiftUI布局的一些写法基础(用Swift构造UI布局)
    这个文档是在你 完全熟悉Objective-C上用代码构造UI的前提下写的官方教程:https://developer.apple.com/tutorials/swiftui/creating-and-combining-views*使用的一些......
  • 一些关于Python Class和C++ Class 的不同点
    写在前面本文将对PythonClass的用法进行讲解,且重点将体现PythonClass与C++Class不同的地方。类的定义和C++类似,Python采用了Classxxx的定义方式,不过首字母需要大写......
  • 【Azure 应用服务】Azure Web App 服务默认支持一些 Weak TLS Ciphers Suite,是否有办
    问题描述当AzureWebApp进行安全扫描后,发现依旧支持很多弱TLS加密套件(WeakTLSCiphersSuite),那么是否有办法来关闭这些弱的加密套件呢?在WindowsIIS环境中,可以通过......
  • 你被裁了需要知道的一些细节
    前言就在上周,得知自己要被裁了,理由是公司在疫情下的经济性裁员,因此特别记录一下关于裁员过程中需要注意的一些细节。关于工作交接要在收到书面通知之后,再进行工作交接,否......
  • 关于sqlserver里的字符集“SQL_Latin1_General_CP1_CI_AS”、“Chinese_PRC_CI_AS”
     问题1:Cannotresolvethecollationconflictbetween"Chinese_PRC_CI_AS"and"SQL_Latin1_General_CP1_CI_AS"intheequaltooperation.SQL查询出现这......
  • vb的一些搞怪的操作
    VB代码之:鼠标锁optionExplicitPrivateTypeRECT LeftAsLong TopAsLong RightAsLong B......
  • STM32F103的一些知识
    一、前言为了方便理解和查阅本人所需的知识,在此做笔记。知识点来源书本与网络,如有侵权,联系删除。二、GPIO定义一个GPIO_InitTypeDef类型结构体GPIO_InitTypeDefGPI......
  • SQL Server 读写分离配置的一些问题
    SQLServer读写分离配置的一些问题 1,新建发布服务器遇到此服务器上未安装复制组件先执行以下sqlusemastergoselect@@servername;selectserverproperty('servern......
  • 一些基础的笔记Easy_Maths
    EasyMaths排列组合:剩余法对等法R进制整数表示:除以基数R,取余,逆序写下R进制小数表示:乘以基数R,向下取整,顺序写下反码补码原码:反码=绝对值负数符号位不动,其余按位取......
  • Mysql设置字符集
    记录设置数据库字符集。1、当向数据库插入表,或者在表中插入数据时,出现ERROR1366(HY000):Incorrectstringvalue:‘\xBD\xF0\xD3\xB9’forcolumn‘name......