正则表达式——Unicode

Posted gaara0305

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式——Unicode相关的知识,希望对你有一定的参考价值。

第 7 章 Unicode

7.1 关于编码

??通常,英文编码较为统一,都采用ASCII编码或可以兼容ASCII编码(即编码表的前127位与ASCII编码一直,常见的各种编码,包括Unicode编码都是如此)。也就是说,稳赢字母、阿拉伯数字、稳赢的各种符号,在不同编码下的码值(Code Point)基本是一样的,比如字母A,起码值总是41;中文的情况则不同,常见的中文编码有GB18030(也就是CP54936,主要是在Windows平台下使用。早期是GBK,也就是CP936,如今采用的GB18030与GBK是兼容的,考虑到大家习惯说“GBK编码”,下文也采用“GBK编码”的说法)和Unicode(主要用于Linux/UNIX、Mac OS)两种,同一个中文字符在两种编码下的码值并不相同。比如“发”,在GBK编码下的码值为b7a2,而在Unicode下其码值为53d1(根据惯例,Unicode字符一般即为uhex的形式,其中hex是码值的十六进制表示,所以“发”的Unicode记法就是u53d1).

??为方便下面的讲解,这里先约定两种提法:

??ASCII字符,即ASCII编码表中的字符(也就是码值在0 ~ 127之间的字符,不包括扩展ASCII字符),每个字符用一个字节表示。常见的英文字符和半角标点符号,都属于ASCII字符。

??非ASCII字符,即ASCII编码表之外的字符,在本书中指多字节字符。中文字符属于“非ASCII字符”,它们在GBK编码中一般占用2个字节,在UTF-8编码中占用3个字节。常见的Unicode编码是UTF-8,它是Unicode的一种存储格式,UTF-16也是一种存储格式。无论是UTF-8还是UTF-16,同一字符的Unicode编码是不变的,只是存储时的变现形式不同。比如“发”的码值53的,但以UTF-8编码保存时占用3个字符,分别是e5 8f 91,保存为UTF-16编码时占用用2个字符,分别53 d1。

以上是关于正则表达式——Unicode的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式:去除Unicode

Unicode 正则表达式;无效的 XML 字符

[正则表达式]匹配Unicode

通过 Java 正则表达式提取 semver 版本字符串的片段

如何使用正则表达式可移植地解析(Unicode)度数符号?

用于 unicode 大写单词的 Python 正则表达式