Character sets and encodings
このページでは、C++標準で規定されているいくつかの文字セットについて説明します。
翻訳文字集合翻訳文字集合 は以下の要素で構成される:
翻訳文字集合は、基本文字集合と基本リテラル文字集合(後述)の上位集合である。 |
(C++23以降) |
基本文字セット
以下の 基本文字セット は 96 (C++26まで) 99 (C++26以降) 文字で構成されます:
| コードポイント | 文字名 | グリフ |
|---|---|---|
| U+0009 | 文字タブulation | |
| U+000B | 行タブulation | |
| 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 | Null |
| U+0007 | Bell |
| U+0008 | Backspace |
| U+000D | キャリッジリターン (CR) |
実行文字集合
実行文字集合と実行ワイド文字集合は、基本リテラル文字集合の上位集合です。 実行文字集合のエンコーディングと追加要素の集合(存在する場合)はロケール固有です。 実行ワイド文字集合の各要素は、個別の wchar_t コード単位として表現可能でなければなりません。
コード単位とリテラルエンコーディング
code unit は文字型の整数値です。 character literal においてマルチキャラクタまたは非エンコード可能文字リテラル以外のもの、または string literal 内の文字は、エンコーディングプレフィックスによって決定される1つ以上のcode unitのシーケンスとしてエンコードされます。これはそれぞれの literal encoding と呼ばれます。
実行文字集合のうちの1つのリテラルエンコーディングまたはロケール固有のエンコーディングは、基本リテラル文字集合の各要素を、非負の値を持つ単一のコード単位で符号化し、他のいずれの要素のコード単位とも異なる値を持つ。基本リテラル文字集合に含まれない文字は、複数のコード単位で符号化されることがあり、そのようなコード単位の値は、基本リテラル文字集合の要素のコード単位の値と同じである可能性がある。実行文字集合のエンコーディングは、いずれのリテラルエンコーディングとも無関係であり得る。
通常リテラルエンコーディングは、通常の文字リテラルまたは文字列リテラルに適用されるエンコーディングです。ワイドリテラルエンコーディングは、ワイド文字リテラルまたはワイド文字列リテラルに適用されるエンコーディングです。
U+0000 NULL文字は値0としてエンコードされます。変換文字セットの他の要素は値0のコード単位でエンコードされません。数字0 (U+0030)以降の各10進数字文字のコード単位値は、前の文字の値より1大きくなります。通常リテラルとワイドリテラルのエンコーディングはそれ以外は実装定義です。
UTF-8、UTF-16、またはUTF-32リテラルについて、変換文字集合の各文字に対応するUCSスカラ値は、それぞれのUCS符号化方式についてISO/IEC 10646で規定されている通りに符号化されます。
注記
C++23では一部の文字セットの標準名が P2314R4 によって変更されました。
| 新しい名称 | 旧名称 |
|---|---|
| basic character set | basic source character set |
| basic literal character set |
basic execution character set
basic execution wide-character set |
UTF-8ソースファイル以外のソースファイルから (UTF-8ソースファイル以外) (C++23以降) 文字の 基本文字集合 (C++23以前) 変換文字集合 (C++23以降) へのマッピングは 翻訳フェーズ1 において実装定義であるため、実装は基本ソース文字がソースファイル内でどのように表現されるかを文書化する必要があります。
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| CWG 788 | C++98 |
実行文字集合のメンバーの値は
実装定義であったが、ロケール固有ではなかった |
ロケール固有である |
| CWG 1796 | C++98 |
基本実行(ワイド)文字集合における
ナル(ワイド)文字の表現は全てのビットがゼロであった |
値がゼロであることのみが要求される |
関連項目
| ASCII チャート | |
|
C ドキュメント
for
文字セットとエンコーディング
|