名稱空間
變體
操作

字元集和編碼

來自 cppreference.com
< cpp‎ | 語言
 
 
C++ 語言
 
 

本頁描述了 C++ 標準中指定的幾種字元集。

目錄

轉換字元集

轉換字元集由以下元素組成:

  • 每個抽象字元被分配一個 Unicode 碼空間中的碼點,以及
  • 為每個未分配給抽象字元的 Unicode 標量值分配一個不同的字元。

轉換字元集是基本字元集和基本字面量字元集(見下文)的超集。

(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

N O P Q R S T U V W X Y Z

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

n o p q r s t u v w x y z

U+007B 左花括號 {
U+007C 豎線 |
U+007D 右花括號 }
U+007E 波浪號 ~

以下字元自 C++26 起新增到基本字元集:

程式碼單元 字元 字形
U+0024 美元符號 $
U+0040 商業at符號 @
U+0060 重音符 `
(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 文件 關於 字元集和編碼