字符

*UTF-8

UTF-8是一个变长的编码方案,用于表示Unicode字符。在UTF-8编码中,一个字符可以由1到4个字节来表示。具体的字节数取决于字符的Unicode码点:

1字节:如果字符的Unicode码点在U+0000到U+007F之间,它会被编码为一个单一的字节。这意味着ASCII字符集中的字符(例如英文字母、数字和某些标点符号)在UTF-8中都是1字节(兼容 ascii 这也是为什么首选 utf8原因)

2字节:如果字符的Unicode码点在U+0080到U+07FF之间,它会被编码为两个字节。

3字节:如果字符的Unicode码点在U+0800到U+FFFF之间,它会被编码为三个字节。这包括了大部分常用的汉字、韩文、日文等。

4字节:如果字符的Unicode码点在U+010000到U+10FFFF之间,它会被编码为四个字节。

Unicode

Unicode是一个国际标准,旨在为世界上所有的字符、字母和符号定义一个唯一的数字标识码。
1、全球字符集:Unicode旨在包含世界上所有的字符、标点和符号。
2、唯一的代码点:在Unicode中,每个字符都有一个唯一的标识符,称为“代码点”。
3、平面和区域:Unicode字符被分配到不同的“平面”中。最常用的字符位于基本多文种平面 (BMP),其代码点范围是U+0000到U+FFFF。还有其他辅助平面来容纳其他较少使用的字符。
4、不是编码方案:Unicode定义了字符和代码点的关系,但它本身不是一个字节编码方案。UTF-8、UTF-16和UTF-32是将Unicode代码点转换为字节序列的编码方案。
5、兼容性:Unicode被设计为与ASCII完全兼容。这意味着在ASCII范围内的Unicode代码点与原始的ASCII字符有相同的数字值。
6、规范化:由于历史和文化原因,某些字符可以有多种不同的表示方法。Unicode提供了规范化过程,使得这些字符可以被转换为一个标准形式,从而在字符串比较和搜索中有一致的结果。
7、现代和历史文本:Unicode不仅包括现代使用的字符,还包括古老和历史性的脚本,如古埃及的象形文字和古代楔形文字。

举个列子

s='你好' (中文三个字节表示一个字符,一个字节八位,三个字节可以表示2^(3*8)个字符)
"你好" 的UTF-8字节表示:b'\xe4\xbd\xa0\xe5\xa5\xbd'
整数列表创建字节 bytes_list = [0xe4, 0xbd, 0xa0, 0xe5, 0xa5, 0xbd]
result = bytes(bytes_list)
print(result) # 输出: b'\xe4\xbd\xa0\xe5\xa5\xbd',这表示 "你好"

s='hello'
"hello" 的 UTF-8 字节表示:b'hello'
整数列表创建字节 byte_list = [104, 101, 108, 108, 111]
b = bytes(byte_list)
print(b) # 输出:b'hello'

使用Go语言将字符串中的中文字符替换为空

package main

import (
    "fmt"
    "regexp"
)

func main() {
    str := "Hello 你好 World 世界"

    // 使用正则表达式匹配中文字符
    re := regexp.MustCompile("[\u4e00-\u9fa5]")
    result := re.ReplaceAllString(str, "")

    fmt.Println(result)  // 输出: Hello  World 
}

Unicode码点在U+0800 怎么使用utf8表示
为了将 U+0800 转换为 UTF-8,我们可以按照以下步骤操作:
U+0800 用二进制表示是: 1000 0000 0000
根据 UTF-8 的编码规则,对于三个字节的字符:
第一个字节的前缀是 1110,其后跟字符的前 4 位;
第二个字节的前缀是 10,其后跟字符的接下来的 6 位;
第三个字节的前缀是 10,其后跟字符的最后 2 位。
以此为基础,将 U+0800 转换为 UTF-8:
第一个字节:1110 + 1000 = 11101000 = 0xE0 in hex
第二个字节:10 + 000000 = 10000000 = 0x80 in hex
第三个字节:10 + 0000 = 10000000 = 0x80 in hex
因此,U+0800 在 UTF-8 编码格式下表示为字节序列 0xE0 0x80 0x80。

Unicode码点在U+1F600 怎么使用utf8表示
为了将 U+1F600 Unicode 码点转换为 UTF-8 编码,我们可以按照以下步骤操作:
首先,U+1F600 用二进制表示是: 1 1111 0110 0000 0000
根据 UTF-8 的编码规则,对于四个字节的字符:
第一个字节的前缀是 11110,其后跟字符的前 3 位;
第二个字节的前缀是 10,其后跟字符的接下来的 6 位;
第三个字节的前缀是 10,其后跟字符的接下来的 6 位;
第四个字节的前缀是 10,其后跟字符的最后 6 位。
以此为基础,将 U+1F600 转换为 UTF-8:
第一个字节:11110 + 001 = 11110001 = 0xF0 in hex
第二个字节:10 + 111101 = 10111101 = 0xBD in hex
第三个字节:10 + 100000 = 10100000 = 0xA0 in hex
第四个字节:10 + 000000 = 10000000 = 0x80 in hex
因此,U+1F600 在 UTF-8 编码格式下表示为字节序列 0xF0 0xBD 0xA0 0x80。

科普 为什么使用十六进制表示字节

在计算机中,字节(byte)通常用两个十六进制数字表示,因为一个字节等于8位,而每一个十六进制数字可以表示4位(也称为一个“nibble”或四位二进制数)。这意味着两个十六进制数字正好可以表示一个字节。

例如,考虑字节 10101100。我们可以将这个字节分成两部分:1010 和 1100。在十六进制中,1010 对应于 A,1100 对应于 C。因此,10101100 的十六进制表示是 AC。

在很多编程语言和文本表示中,十六进制值通常以 0x 前缀表示,例如:0xAC。

在实际应用中,当你看到如 \xFF 或 0xFF 这样的表示时,它们表示一个值为 255 的字节,其中 FF 是该字节的十六进制表示。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容