首页 > 编程语言 >Unicode 与编程语言

Unicode 与编程语言

时间:2022-09-18 22:56:05浏览次数:85  
标签:字符 Code String 编程语言 Point char Unicode

编程语言中的 Unicode

因为 Unicode 可以给世界上大部分字符编码,因此大部分编程语言内部,都是使用 Unicode 来处理字符的。例如在 Java 中定义一个字符 char c = '中',这个字符实际是使用两个字节在内存中存储着他的 UTF-16 编码。所以如果将这个字符强转成整型 int i = (int) c,得到的结果 20013 (0x4E2D),就是 在 Unicode 中的 Code Point 值。

这个说法不完全准确,因为大部分编程语言定义的时候,Unicode 还没有辅助平面,所以一般都是固定的用两个字节来存储一个字符。

在有了辅助平面以后,辅助平面的字符,会被 UTF-16 编码成两个 Code Unit,需要 4 个字节来存储。而编程语言为了兼容性,不太可能将原有的 char 类型长度改为 4 个字节。所以就有可能需要用两个 char 来存储一个实际的字符。而原有的获取字符串长度的 API,实际获取到的是字符串中 Code Unit 的个数,不是实际字符的个数。获取某个位置字符的 API 也是同理,获取到的可能是一对 Code Unit 中的一个。因此需要使用编程语言提供的新的 API 或者通过额外的代码,来正确处理辅助平面的字符。

在编程语言中使用 Unicode

主要涉及以下操作:

@startuml

hide empty description

state Character
state CodePoint
state Bytes

Character -up-> CodePoint
CodePoint -down-> Character

CodePoint -down-> Bytes
Bytes -up-> CodePoint

Character -right-> Bytes
Bytes -left-> Character

@startuml

这其中最关键的就是字符和 Code Point 之间的转换。因为这里涉及字符集的映射,如果编程语言不支持,我们就要自己外挂编码表才能实现,否则无论如何都是没办法通过枚举实现的。

而有了 Code Point 以后,根据 UTF 系列编码的规则,我们自己也可以通过代码来实现 Code Point 和字节序列的转换。当然如果编程语言内置了相关的 API,那就更方便了。

这里省略了 Code Unit 的概念,因为一般在代码中,不会有这个中间过程,直接就编码成字节序列了。

Java

char 和 String 中可以使用 \uXXXX 来表示一个 Unicode 字符。String 中可以使用两个 \uXXXX 表示一个辅助平面的字符,但 char 中不行,因为一个辅助平面字符需要用两个 char 存储:

char c = '\u4E2D';
String s = "\uD840\uDC21";

String to Code Point count:

int count = "

标签:字符,Code,String,编程语言,Point,char,Unicode
From: https://www.cnblogs.com/val3344/p/16706146.html

相关文章

  • Unicode 标准化
    Unicode中有些特殊的字符,可以由其他不同的特殊字符组合出来。例如ñ(U+00F1)和ñ(U+006EU+0303)。这两个字符在展现和含义上是完全等价的,但其编码却是不同的。为了......
  • C++ Unicode字符串
    字符串前面加L表示该字符串是Unicode字符串。_T是一个宏,如果项目使用了Unicode字符集(定义了UNICODE宏),则自动在字符串前面加上L,否则字符串不变。因此,VisualC++里边定义字符......
  • 终于实现了一门属于自己的编程语言
    前言都说程序员的三大浪漫是:操作系统、编译原理、图形学;最后的图形学确实是特定的专业领域,我们几乎接触不到,所以对我来说换成网络更合适一些,最后再加上一个数据库。这四......
  • 遇到ImportError: cannot import name ‘soft_unicode’ from 'markupsafe’问题
    运行jupyternotebook的时候报错:ImportError:cannotimportname'soft_unicode'from'markupsafe'这个报错应该怎么解决呢?1、根据错误提示,我们发现是导入markupsafe这......
  • 第二节:编程语言与Python介绍
    一引子基于上一节所学,有了计算机硬件,再在硬件之上安装好操作系统,我们就有了一个应用程序的运行平台,我们接下来的任务就是学习如何使用某款编程语言来开发应用程序。 ......
  • 每个开发人员都应该知道的编程语言
    每个开发人员都应该知道的编程语言在不断发展的软件和Web开发世界中,对精通编码的程序员的需求一直在上升。当然,随着科技行业的发展,编程语言的数量也在增加。虽然大多......
  • 无服务器计算编程语言采用
    无服务器计算编程语言采用本文介绍了主要云供应商提供的不同编程语言和运行时。采用情况和趋势是什么。每个云供应商都提供哪些编程语言?Serverlessprogramminglangua......
  • 程序报错:UnicodeDecodeError: 'gbk' codec can't decode byte 0xad in position 2: il
    当我输入代码,读取文件的时候file=open('a.txt','r')print(file.readlines())file.close()结果报这个错:  一看,发现编码出错了,百度了一下,原来open函数其中的encod......
  • 为什么我们强迫你学习多种编程语言
    为什么我们强迫你学习多种编程语言我一直在建造引导程序作为过去几年的一个副项目,最近有很多新生问同样的问题:“为什么你的后端课程要求我学习不止一种编程语言?”......
  • 2022 IEEE 编程语言榜单发布!Python 又双叒叕霸榜了,学 SQL 工作更吃香!
    哈喽兄弟们!近年来,Python宛如一匹黑马,一骑绝尘,横扫TIOBE、StackOverflow等榜单,如今在IEEESpectrum发布的第九届年度顶级编程语言榜单中,Python依然是C、C++......