字元集和編碼
本頁描述了 C++ 標準中指定的幾種字元集。
轉換字元集轉換字元集由以下元素組成:
轉換字元集是基本字元集和基本字面量字元集(見下文)的超集。 |
(C++23 起) |
[編輯] 基本字元集
基本字元集包含以下 96(C++26 前)99(C++26 起) 個字元:
程式碼單元 | 字元 | 字形 |
---|---|---|
U+0009 | 字元製表符 | |
U+000B | 行製表符 | |
U+000C | 換頁 (FF) | |
U+0020 | 空格 | |
U+000A | 換行符 (LF) | 新行 |
U+0021 | 感嘆號 | !
|
U+0022 | 引號 | "
|
U+0023 | 井號 | #
|
U+0025 | 百分號 | %
|
U+0026 | 和號 | &
|
U+0027 | 撇號 | '
|
U+0028 | 左圓括號 | (
|
U+0029 | 右圓括號 | )
|
U+002A | 星號 | *
|
U+002B | 加號 | +
|
U+002C | 逗號 | ,
|
U+002D | 連字號-減號 | -
|
U+002E | 句號 | .
|
U+002F | 斜槓 | /
|
U+0030 .. U+0039 | 數字零 .. 九 | 0 1 2 3 4 5 6 7 8 9
|
U+003A | 冒號 | :
|
U+003B | 分號 | ;
|
U+003C | 小於號 | <
|
U+003D | 等於號 | =
|
U+003E | 大於號 | >
|
U+003F | 問號 | ?
|
U+0041 .. U+005A | 拉丁大寫字母 A .. Z | A B C D E F G H I J K L M
|
U+005B | 左方括號 | [
|
U+005C | 反斜槓 | \
|
U+005D | 右方括號 | ]
|
U+005E | 抑揚符 | ^
|
U+005F | 下劃線 | _
|
U+0061 .. U+007A | 拉丁小寫字母 a .. z | a b c d e f g h i j k l m
|
U+007B | 左花括號 | {
|
U+007C | 豎線 | |
|
U+007D | 右花括號 | }
|
U+007E | 波浪號 | ~
|
以下字元自 C++26 起新增到基本字元集:
|
(C++26 起) |
[編輯] 基本字面量字元集
基本字面量字元集包含基本字元集中的所有字元,以及以下控制字元:
程式碼單元 | 字元 |
---|---|
U+0000 | 空字元 |
U+0007 | 響鈴 |
U+0008 | 退格 |
U+000D | 回車 (CR) |
[編輯] 執行字元集
執行字元集和執行寬字元集是基本字面量字元集的超集。執行字元集的編碼和附加元素的集合(如果有)是與區域設定相關的。執行寬字元集的每個元素必須能夠表示為不同的 wchar_t 程式碼單元。
[編輯] 程式碼單元與字面量編碼
程式碼單元是字元型別的整數值。 字元字面量(多字元或不可編碼字元字面量除外)或 字串字面量中的字元被編碼為由編碼字首確定的一系列一個或多個程式碼單元;這被稱為相應的字面量編碼。
字面量編碼或執行字元集之一的區域設定特定編碼,將基本字面量字元集的每個元素編碼為一個具有非負值的單個程式碼單元,該程式碼單元與其他此類元素的程式碼單元不同。不在基本字面量字元集中的字元可以編碼為一個以上的程式碼單元;此類程式碼單元的值可以與基本字面量字元集元素的程式碼單元值相同。執行字元集的編碼可能與任何字面量編碼無關。
普通字面量編碼是應用於普通字元或字串字面量的編碼。寬字面量編碼是應用於寬字元或字串字面量的編碼。
U+0000 空字元編碼為值 0。轉換字元集的其他任何元素都不會被編碼為值為 0 的程式碼單元。數字 0 (U+0030) 之後的每個十進位制數字字元的程式碼單元值應比前一個數字的值大一。普通和寬字面量編碼在其他方面是實現定義的。
對於 UTF-8、UTF-16 或 UTF-32 字面量,與轉換字元集中的每個字元對應的 UCS 標量值將按照 ISO/IEC 10646 中針對相應 UCS 編碼形式的規定進行編碼。
[編輯] 註解
C++23 中透過 P2314R4 更改了一些字元集的標準名稱。
新名稱 | 舊名稱 |
---|---|
基本字元集 | 基本源字元集 |
基本字面量字元集 | 基本執行字元集 基本執行寬字元集 |
在翻譯階段 1期間,原始檔(UTF-8 原始檔除外(C++23 起))字元到基本字元集(C++23 前)轉換字元集(C++23 起)的對映是實現定義的,因此實現需要記錄原始檔中的基本源字元是如何表示的。
[編輯] 缺陷報告
下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。
缺陷報告 | 應用於 | 釋出時的行為 | 正確的行為 |
---|---|---|---|
CWG 788 | C++98 | 執行字元集成員的值 是實現定義的,但與區域設定無關 |
它們是與區域設定相關的 |
CWG 1796 | C++98 | 基本執行(寬)字元集中的空(寬)字元的表示 過去所有位都為零 |
現在只要求值為零 |
[編輯] 參見
ASCII 表 | |
C 文件 關於 字元集和編碼
|