|
NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
|
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 码点 |
根据 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 解码时验证) |