字符与编码基础知识再研究

字符与编码基础知识介绍

一、什么是字符?

字符是指用于书写、显示和存储信息的基本符号,例如字母、数字、标点符号和汉字等。计算机无法直接理解字符,它只能处理数字,因此需要一种方式将字符转换为数字表示,这种方式就是字符编码。

二、什么是编码?

编码是一种将字符映射到数字的规则。不同的编码标准规定了字符与数字之间的对应关系。

  • 字符集:包含所有可能的字符及其对应的数字编号。例如,Unicode 就是一个统一的字符集,覆盖了全球绝大多数语言的字符。
  • 编码方式:定义如何将字符集中数字编号转换为计算机可识别的二进制数据。

三、Unicode 与 UTF 编码

1. Unicode

Unicode 是一种全球通用的字符集标准。它为每个字符分配了一个唯一的编号,称为 码点(Code Point) 。例如:

  • 字符 A 的 Unicode 码点是 U+0041
  • 字符 中 的 Unicode 码点是 U+4E2D

Unicode 只是一个字符集,它不会直接规定如何存储字符。为了解决字符的存储和传输问题,出现了多种编码方式。

2. UTF 编码

UTF(Unicode Transformation Format) 是 Unicode 的具体编码方式,包括:

  • UTF-8:

    • 使用 1~4 个字节 编码一个字符。
    • 英文等 ASCII 字符仅用 1 个字节表示。
    • 中文、日文等字符通常用 3~4 个字节表示。
    • 特点:节省空间且兼容 ASCII,是网络传输的首选。
  • UTF-16:

    • 使用 2 或 4 个字节 编码一个字符。
    • 常用字符用 2 字节,少数特殊字符用 4 字节。
    • 特点:常用于 Windows 系统和 Java 等环境。
  • UTF-32:

    • 使用固定 4 个字节 编码每个字符。
    • 特点:查找和处理字符速度快,但占用内存较多。

四、窄字符与宽字符

在实际编程中,字符类型通常分为窄字符 和宽字符。

类型 编码单位 存储方式 典型编码 应用场景
窄字符 (char) 1 字节(8 位) ASCII 或多字节编码(如 UTF-8) ASCII、UTF-8、GBK 等 适合跨平台应用、网络传输、节省内存的场景
宽字符 (wchar_t) 2~4 字节 Unicode 编码(如 UTF-16、UTF-32) UTF-16、UTF-32 等 适合多语言处理、复杂字符集和 Windows 平台开发
  • 窄字符字符串(char) :

    • 通常使用 UTF-8 或 GBK 编码。
    • 适合跨平台和节省内存的场景,例如网络通信和文本处理。
  • 宽字符字符串(wchar_t) :

    • 通常使用 UTF-16 或 UTF-32 编码。
    • 适合处理复杂字符集、国际化应用和 Windows 平台开发。

五、常用的字符指针与常量指针

在 C/C++ 等语言中,经常使用指针来操作字符串。根据字符类型的不同,有不同的指针类型:

类型 窄字符指针 宽字符指针 通用字符指针
字符指针 char* (LPSTR) wchar_t* (LPWSTR) TCHAR* (LPTSTR)
常量字符指针 const char* (LPCSTR) const wchar_t* (LPCWSTR) const TCHAR* (LPCTSTR)
长字符指针 char** wchar_t** TCHAR**
常量长字符指针 const char** const wchar_t** const TCHAR**
指针常量 char* const wchar_t* const TCHAR* const
常量指针常量 const char* const (LPCSTR) const wchar_t* const (LPCWSTR) const TCHAR* const (LPCTSTR)

六、总结

  1. 字符 是抽象的符号,计算机需要通过编码方式将其转换为数字进行存储和处理。
  2. Unicode 是一种字符集标准,用于统一表示世界上所有的字符。
  3. UTF-8、UTF-16、UTF-32 是 Unicode 的具体编码方式,针对不同场景提供不同的性能与空间效率。
  4. 窄字符 使用多字节编码,节省空间,适合英文等简单文本。
  5. 宽字符 使用 Unicode 编码,更适合多语言场景。
  6. 窄字符字符串 适合跨平台和节省内存的场景。
  7. 宽字符字符串 适合处理复杂字符集和 Windows 平台开发。
  8. 在编程中,使用指针操作字符串时,需要根据字符类型选择正确的指针类型。
相关推荐
高冷小鱼殿下4 小时前
C 语言指针与输入输出
c++
微订校园外卖平台4 小时前
区县外卖跑腿系统搭建:四端架构、订单链路与验收
架构·外卖系统·本地生活·微订
天远API5 小时前
零信任架构实战:基于天远劳动仲裁信息查询构建自动化灵活用工劳务派遣人员准入背调网关
运维·人工智能·架构·自动化
路溪非溪5 小时前
C++标准库之智能指针
linux·开发语言·c++
hetao17338375 小时前
2026-11-02 hetao1733837 的刷题记录
c++·算法
Tairitsu_H5 小时前
[C++高阶数据结构·图论下] 最短路径:为什么“挑最小的”一定正确?
数据结构·c++·图论
code_slave(码畜)6 小时前
微服务架构落地:慢 SQL 治理与连接池调优 —— 守住数据库的最后一道防线
数据库·spring boot·sql·spring cloud·微服务·架构
weixin199701080167 小时前
官方授权通道和灰色爬虫,做数据服务该选哪条路(附 python 源码)
c++·爬虫·python
wuminyu7 小时前
JVM执行引擎学习总结:热点字节码编译成本地机器码
java·linux·c语言·jvm·c++
Tairitsu_H7 小时前
[C++高阶数据结构·图论上] 最小生成树:为什么“选边”和“选点”是两条路?
数据结构·c++·图论·最小生成树