「计算机知识随记」Unicode 与 UTF-8 和仍然存在的乱码问题

2023-09-22 13:27:50

0 背景

中文维基百科对Unicode 的定义是:

如果有一种编码,将世界上所有的符号都纳入其中。
每一个符号都给予一个独一无二的编码,那么乱码问题就会消失。这就是Unicode,就像它的名字都表示的,这是一种所有符号的编码。

可是在Unicode已经发布的(Unicode1991年发布,UTF-8 是 1993 年初发布)三十年中,编码问题并没有解决,我仍然会遇到编码问题?为什么呢?

1 Unicode

1.1 Unicode之前

介绍Unicode前,需要先介绍计算机历史:

计算机由美国人发明,显示的字符自然是英语,由于英语字符比较少,当时推出的ASCII编码就可以表示全部字符.

随着计算机不断发展,非英语区的人们也接触到了计算机,但传统计算机只支持ASCII编码表的字符,对于非英语区的人们使用很吃力,解决办法是使用不同语言的人都出了一套收录自己文字的字符编码(也就是i18n~)

Unicode出来前,各个国家和地区使用不同的编码规则(编码集):中国有GB2312-80(GBK前身),日本有JIS(Shift_JIS前身).

由于这些编码规则是为了特定人群(例:使用简体汉字的人)使用的,所以只会覆盖特定人群使用的(常用)字符,对于其他语言的字符自然不能很好支持(例:GB2312-80不支持藏文等),自然A编码集规则下编写的文章由B编码集规则打开自然会有错

1.2 Unicode之后

上述各自为政的情况自然会让人想到:

如果有一种编码,将世界上所有的符号都纳入其中,这样全世界人仅需要使用该编码进行交流,就可以避免乱码问题!因为全世界使用的是同一套规范!类似世界语之于英语/华语/西语!

说回Unicode:
Unicode 本质是将每一个字符规定了唯一的映射值(即码点 code point)

这些字符对于的码点有什么用?根据这些码点,可以编写编码算法,编码算法指示字符以二进制存储到存储设备的"形态",类似UTF-8/UTF-16/UTF-32.

也可以这么理解:Unicode 是理论抽象,是一种规范,而UTF-8等编码算法是对Unicode理论的实现

2. 仍然存在的乱码问题

本质上,Unicode的实现编码算法是"世界"级别的,而Shfit_JIS等编码算法是"国家/地区"级别

但是为什么在Unicode问世三十年之后还会存在问题呢?
核心是微软(Windows)为了保证兼容性,为了保证使用了老GBK API的应用程序正常使用,哪怕Windows的内核已经用unicode编码,但是对于应用程序Windows允许使用不同的字符集,所以默认字符集仍然是各个国家地区的编码集,没有改为unicode的实现编码集

除非某天Windows放弃非unicode的程序

更多推荐

压力测试:Jmeter自动化测试详解

1、Jmeter的安装与部署1.1环境要求jdk1.8、配置jdk环境变量(JAVA_HOME:C:\ProgramFiles\Java\jdk1.8.0_101Path:;%JAVA_HOME%\bin;CLASSPATH:%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar)1.2安装

半导体IC电子器件需要老化吗?

前言本文表明,基于初始时刻故障率的时间导数的浴盆曲线(BTC)可以被视为老化测试(BI​​T)是否应该进行的合适标准。进行。还表明,上述标准实际上是产品制造商从众多供应商处收到的批量生产组件的随机统计故障率(SFR)的方差,这些供应商对可靠性的承诺是未知的,并且它们的随机SFR因此,可能会在一个非常大的范围内变化,从零

国内首家!阿里云 Elasticsearch 8.9 版本释放 AI 搜索新动能

简介:阿里云作为国内首家上线Elasticsearch8.9版本的厂商,在提供ElasticsearchRelevanceEngine™(ESRE™)引擎的基础上,提供增强AI的最佳实践与ES本身的混合搜索能力,为用户带来了更多创新和探索的可能性。近年来,人工智能的快速发展和广泛应用在各个行业中都取得了显著的成果。在搜

2023年中国研究生数学建模竞赛D题解题思路

为了更好的帮助大家第一天选题,这里首先为大家带来D题解题思路,分析对应赛题之后做题阶段可能会遇到的各种难点。稍后会带来D题的详细解析思路,以及相关的其他版本解题思路成品论文等资料。赛题难度评估:A、B>C>E、F>D选题人数评估:D>E、F>C>A、BD题区域双碳目标与路径规划研究以当下热门话题双碳碳中和为命题背景设置

内网穿透的应用-Cloudreve搭建云盘系统,并实现随时访问

文章目录1、前言2、本地网站搭建2.1环境使用2.2支持组件选择2.3网页安装2.4测试和使用2.5问题解决3、本地网页发布3.1cpolar云端设置3.2cpolar本地设置4、公网访问测试5、结语1、前言自云存储概念兴起已经有段时间了,各互联网大厂也纷纷加入战局,一时间公有云盘遍地开花。但一段时间后,公有云盘潜在的

【2023全网最全最火】Selenium WebDriver教程(建议收藏)

在本教程中,我将向您介绍SeleniumWebdriver,它是当今市场上使用最广泛的自动化测试框架。它是开源的,可与所有著名的编程语言(如Java、Python、C#、Ruby、Perl等)一起使用,以实现浏览器活动的自动化。通过本文,我将告诉您开始使用SeleniumWebDriver测试Web应用程序所需了解的所

https跳过SSL认证时是不是就是不加密的,相当于http?

https跳过SSL认证时是不是就是不加密的,相当于http?,其实不是,HTTPS跳过SSL认证并不相当于HTTP,也不意味着没有加密。请注意以下几点:HTTPS(HypertextTransferProtocolSecure)本质上是在HTTP的基础上添加了安全性层(SSL/TLS),用于加密和保护数据传输。通过使

一、并发编程之----AQS上

对于一个程序员来说,需要解决多线程问题,这就需要好好学习下并发了。并发编程设计比较广泛,那我们就先从线程、进程开始吧一、线程、进程二、并发1、为什么会出现2、是什么并发是针对一个共享变量,多个线程同一时间去编辑该共享变量。3、会出现什么问题其中一个线程a获取到共享变量x后进行修改,而这一时刻,线程b拿到了共享变量x,也

华纳云:如何搭建Nginx服务器做到负载均衡

要搭建Nginx服务器实现负载均衡,您可以使用Nginx作为反向代理来分发客户端请求到多个后端服务器。以下是一个基本的步骤指南:前提条件:您需要一台安装有Nginx的服务器。您需要有多台后端服务器,这些服务器将处理客户端请求。步骤:安装Nginx:如果您还没有安装Nginx,请使用适合您操作系统的包管理工具来安装Ngi

【MATLAB】【函数介绍】cp2tform函数从控制点对推断空间变换

官方链接:https://ww2.mathworks.cn/help/images/ref/cp2tform.html?s_tid=doc_ta.cp2tform函数的作用是根据传入的控制点对的坐标推断空间变换参数。函数语法如下:从控制点对推断空间变换,并将此变换作为tform结构返回,有些转换类型具有可选的富家参数t

【EasyExcel】excel表格的导入和导出

【EasyExcel】excel表格的导入和导出【一】EasyExcel简介【二】EasyExcel使用【1】EasyExcel相关依赖【2】写Excel(1)最简单的写(方式一)(2)最简单的写(方式二)(3)排除模型中的属性字段(4)向表格中导出指定属性(5)插入指定的列(6)复杂头数据写入(7)重复写到Excel

热文推荐