首页 > 其他分享 >字符编码问题

字符编码问题

时间:2024-06-15 15:22:58浏览次数:23  
标签:编码 UTF 字节 字符 字符集 问题 Unicode

常使用的几种字符编码和相互之间关系

我们做编程开发时,经常看到并使用的一些字符集,如GBK、Uniode、UTF-8等等。但是我们在使用他们时,如果对底层原理浅尝辄止往往在项目开发时,遇到相关问题摸不着头绪,本文先来浅析一下它们彼此的关系。

计算机在存储信息时,不管是英文字符还是中文字符最终都是保存为保存为0、1的二进制数据。例如字符'A'对应的ASSIC值是65,那么转换成二进制数据就是01000001.举一个简单的例子,这就是我们输入在电脑中的字符和最终存储的数据形式。此时会有说,既然每个字符都有其一一对应的ASSIC值,那么我们直接用ASSIC编码集统一不就行了,为什么还搞出这么多的编码集,在数据交互和保存时还得注意编码集的使用。

Unicode字符集:

当然,如果用的是英文,这当然是满足需求了,但是考虑到这个世界有很多的国家和地区、他们彼此之间使用不同的语言,如果单单使用ASSIC这一套字符集,显然是不满足需求的,例如单单一个中文就搞出来好几套字符编码,简体字一般使用GB23112和后来的GBK等编码格式,繁体字使用Big5。日文使用的是Shift JIS、ECU-JP等等、其他家就更多了,罗列下来字符集就非常多了,这使得不同文字之间的交互变的困难,此时为了解决该问题,Unicode字符集便应运而生,Unicode字符集为了兼容世界各国语言之间难以兼容交互的问题,将原来ASSIC一个字节表示一个字符的基础上,扩展到了后来的四个字节,这基本上可以将世界各国所有的语言文字都囊括进来,可以做到任意一个字符都有其对应的数字标志位,不管是英文、中文、拉丁文等等。但是每个事物的出现除了有优点之外还有它的不足之处。诚然Unicode字符集固然一劳永逸的解决了字符编码繁多交互不方便的问题,但它那一个字符就需要四个字节来存储的要求对于电脑存储和传输效率带来了一定的压力,尤其是在当时早起电脑硬件还不发达的时候,硬盘存储和字节传输带宽都是非常紧缺的资源,无法消耗起一个字符就得用四个字节表示的代价。

UTF字符编码:

UTF的的全程是“Unicode Transformation Format”.主要有UTF-8、UTFF-16、UFT-32。其中UTF-8并不是单子固定的字节长度表示字符的,而是一种可变长的编码方式。它可以表示Unicode字符集中的任意字符。UTF-8编码采用1至4个字节来表示一个字符,根据字符的不同范围来确定编码长度。 UTF-8的出现将大大解决我们上述提到的问题。

 1. 融合性:UTF-8能够适应各种语言的字符编码需求,它可以表示世界上几乎所有的字符,包括亚洲文字、西方文字和特殊字符等。 

 2. 兼容性:UTF-8是ASCII编码的超集,即ASCII编码中的字符在UTF-8中可以用相同的编码表示,这样就实现了与ASCII编码的兼容性。 

 3. 节省空间:相比其他的Unicode编码方式,UTF-8能够使用更少的字节来表示相同的字符,特别是对于ASCII字符,只需要1个字节就可以表示,这样可以节省存储空间。 

 4. 兼容旧系统:由于UTF-8的兼容性和节省空间的特点,很多旧系统和软件也可以直接支持UTF-8编码,而不需要进行大规模的改造。

 5. 国际化支持:UTF-8的出现使得国际化软件和网站得以普及,用户可以使用自己的母语来进行输入和交流,有效地促进了不同语言和文化之间的交流与合作。

文章到了这里,似乎已经讲清楚了不同的字符集合编码格式之间的关系(对于字符集合字符编码文章不做深入探究,只做简单介绍引出问题),但是并没有提及项目中遇到的问题,那么下面我将结合项目中遇到的问题来进一步探讨。

标签:编码,UTF,字节,字符,字符集,问题,Unicode
From: https://www.cnblogs.com/liyaning/p/18249330

相关文章

  • 4-字符串-11-反转字符串-LeetCode344
    4-字符串-11-反转字符串-LeetCode344LeetCode:题目序号344更多内容欢迎关注我(持续更新中,欢迎Star✨)Github:CodeZeng1998/Java-Developer-Work-Note技术公众号:CodeZeng1998(纯纯技术文)生活公众号:好锅(Lifeismorethancode)CSDN:CodeZeng1998其他平台:CodeZeng1998、......
  • DreamJudge-1310-奥运排序问题(精华)
    1.题目描述TimeLimit:1000msMemoryLimit:256mb按要求,给国家进行排名。输入输出格式输入描述:有多组数据。第一行给出国家数N,要求排名的国家数M,国家号从0到N-1。第二行开始的N行给定国家或地区的奥运金牌数,奖牌数,人口数(百万)。接下来一行给出M个国家号。输出描述:......
  • 用c语言实现base64编码接口程序
    简要介绍base64Base64编码是一种常用的编码方式,主要用于将二进制数据转换为可打印的ASCII字符集,以便在不支持二进制传输的介质上安全地传输数据。......
  • 简单聊聊字符编码
    01.简单聊聊字符编码几乎人人都遇过乱码问题,程序们更是经常被乱码弄得抓狂,那么乱码产生的原因是什么呢?字符是如何在计算机里存储的呢?本系列文章我们就来聊聊这个主题。字符编码是计算机世界里最基础、最重要的一个主题之一,如果你是计算机行业工作者,很有必要掌握。如果不彻......
  • Java正则表匹配字符类
    以下是在java中使用正则表达式匹配字符类的一些示例。编号构造匹配说明1[abc]匹配a,b或c(简单类)。2[^abc]除a,b或c之外的任何字符(否定)。3[a-zA-Z]a到z或A到Z,包括(范围)。4[a-d[m-p]]a到d,或m到p:[a-dm-p](联合)。5[a-z&&[def]]d,e或F(交集)。6[a-z&&[^bc]]a到z,b和c除外:[ad-z](......
  • 链表经典题目:环形链表问题(LeetCode141.环形链表、LeetCode142.环形链表Ⅱ)
    ......
  • 面试官:字节流可以处理一切文件为什么还需要字符流呢?
    一、写在开头在计算机领域中百分之九十以上的程序拥有着和外部设备交互的功能,这就是我们常说的IO(Input/Output:输入/输出),所谓输入就是外部数据导入计算机内存中的过程,输出则是将内存或者说程序中的数据导入到外部存储中,如数据库、文件以及其他本地磁盘等。二、什么是IO流这种......
  • 团队博客会议(一)解决三个问题
    在会议中,参与者围绕几个核心议题展开了深入而细致的讨论,以下是会议详细内容的概述: 1.项目进度汇报当前状态:各团队负责人首先汇报了各自负责模块的最新进展,包括已完成的任务、正在进行的工作以及遇到的障碍。亮点与挑战:指出了项目中已取得的阶段性成果,比如用户界面的初步......
  • C# 字符串(String)
    字符串在C#中是特殊的存在,它是引用类型(内存分配在托管堆上),属于不可改变的对象。任何对字符串的操作都会返回1个新的字符串。字符串加@符号,不会对转义字符进行处理,例如:stringstr1=@"C:\Windows\System32";字符串加$符号,可占位插入变量,例如:stringstr2=$"{str1}";.ToSt......
  • 青龙面板常见问题合集
    前言在青龙面板跑脚本的过程中可能会出现各种错误,这里给大家汇总一下常见的问题类型,之后有其他的问题的话会慢慢更新。如果嫌麻烦可以选择直接上车:Rabbit  备用地址:Pro QQ群:570499950阿里云服务器:阿里云高校计划_云工开物_助力高校科研与教育加速-阿里云云小站_专享......