NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到

UTF字符包装类集合 更多...

UTF 的协作图:

struct  character
 char类型包装类 更多...
struct  wcharacter
 wchar_t类型包装类 更多...
struct  u8character
 char8_t类型包装类 更多...
struct  u16character
 char16_t类型包装类 更多...
struct  u32character
 char32_t类型包装类 更多...

详细描述

UTF字符包装类集合

支持 char、wchar_t、char8_t、char16_t、char32_t 等字符类型之间的相互转换。每个包装类都支持字符到各种UTF字符串类型的转换。

遵循的国际标准

本实现严格遵循以下字符编码与字符串处理相关标准规范:

Unicode 核心标准:

UTF 编码格式标准:

字节序标记(BOM)标准:

通用字符集编码标准:

C++ 字符类型标准:

C 语言宽字符标准:

字符类型与编码对应

根据 C++ 标准和 Unicode 规范,各字符类型的编码语义如下:

包装类 基础类型 编码格式 码元位数 说明
character char UTF-8 8 位 普通字符,UTF-8 编码
wcharacter wchar_t 平台相关 平台相关 Windows: UTF-16, Unix: UTF-32
u8character char8_t UTF-8 8 位 UTF-8 编码
u16character char16_t UTF-16 16 位 UTF-16 编码,支持 BOM
u32character char32_t UTF-32 32 位 UTF-32 编码(直接码点)

平台差异

wchar_t 类型在不同平台上的编码不同:

平台 wchar_t 大小 编码格式 说明
Windows 16 位 UTF-16 需要代理对表示辅助平面字符
Linux/macOS 32 位 UTF-32 直接存储完整 Unicode 码点

字节序标记(BOM)处理

根据 RFC 2781 §3.2,UTF-16 字符串可能包含字节序标记:

BOM 值 含义 处理方式
0xFEFF 无字节序反转(同系统序) 根据系统序判断是否需要交换
0xFFFE 需要字节序反转 解码时交换每个码元的字节序
无 BOM 假定为大端序 RFC 2781 推荐使用大端序

u16character 的转换方法自动检测并处理 BOM。

字符转换支持矩阵

每个包装类支持转换到以下字符串类型:

源类型 \ 目标类型 string wstring u8string u16string u32string
character (UTF-8) ✓ 直接 ✓ 转换 ✓ 转换 ✓ 转换 ✓ 转换
wcharacter (平台) ✓ 转换 ✓ 直接 ✓ 转换 ✓ 转换 ✓ 转换
u8character (UTF-8) ✓ 转换 ✓ 转换 ✓ 直接 ✓ 转换 ✓ 转换
u16character (UTF-16) ✓ 转换 ✓ 转换 ✓ 转换 ✓ 直接 ✓ 转换
u32character (UTF-32) ✓ 转换 ✓ 转换 ✓ 转换 ✓ 转换 ✓ 直接

图例:✓ 直接 = 直接复制/无转换,✓ 转换 = 通过 Unicode 码点中转转换

实现细节

特性 规范参数
转换中介 codepoint(Unicode 码点)
无效序列处理 替换为 U+FFFD(� REPLACEMENT CHARACTER)
BOM 检测 UTF-16 字符串自动检测 0xFEFF/0xFFFE
代理对处理 支持 UTF-16 代理对编解码
过度长序列检测 支持(UTF-8 解码时验证)
注解
所有转换均通过 Unicode 码点(codepoint)作为中转格式, 确保转换过程不丢失信息,且遵循 Unicode 标准的无效序列处理规则。
警告
wchar_t 的编码因平台而异,跨平台代码应避免直接依赖 wchar_t 的编码格式。 对于需要可移植编码的场景,推荐使用 char8_t(UTF-8)、char16_t(UTF-16) 或 char32_t(UTF-32)。
参见
https://unicode.org/
https://www.rfc-editor.org/rfc/rfc3629
https://www.rfc-editor.org/rfc/rfc2781
https://en.cppreference.com/w/cpp/language/types