Character sets and encodings
이 페이지는 C++ 표준에 의해 지정된 여러 문자 집합을 설명합니다.
번역 문자 집합번역 문자 집합 은 다음 요소들로 구성됩니다:
번역 문자 집합은 기본 문자 집합과 기본 리터럴 문자 집합(아래 참조)의 상위 집합입니다. |
(C++23부터) |
기본 문자 집합
다음 기본 문자 집합 은 다음 96 (until C++26) 99 (since 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부터 기본 문자 집합에 추가되었습니다:
|
(since C++26) |
기본 리터럴 문자 집합
기본 리터럴 문자 집합 은 기본 문자 집합의 모든 문자와 다음 제어 문자들로 구성됩니다:
| 코드 포인트 | 문자 |
|---|---|
| U+0000 | 널(Null) |
| U+0007 | 벨(Bell) |
| U+0008 | 백스페이스(Backspace) |
| U+000D | 캐리지 리턴(Carriage return, CR) |
실행 문자 집합
실행 문자 집합과 실행 와이드 문자 집합은 기본 리터럴 문자 집합의 상위 집합입니다. 실행 문자 집합의 인코딩과 추가 요소들의 집합(존재하는 경우)은 로케일별로 다릅니다. 실행 와이드 문자 집합의 각 요소는 구별 가능한 wchar_t 코드 단위로 표현 가능해야 합니다.
코드 단위 및 리터럴 인코딩
코드 유닛 은 문자 타입의 정수 값입니다. 문자 리터럴 에서 멀티캐릭터 또는 인코딩 불가능한 문자 리터럴이 아닌 경우, 또는 문자열 리터럴 에서의 문자들은 인코딩 접두사에 따라 결정된 하나 이상의 코드 유닛 시퀀스로 인코딩됩니다; 이를 해당 리터럴 인코딩 이라고 합니다.
실행 문자 집합 중 하나에 대한 리터럴 인코딩 또는 로케일별 인코딩은 기본 리터럴 문자 집합의 각 요소를 음수가 아닌 값을 가진 단일 코드 단위로 인코딩하며, 다른 모든 요소에 대한 코드 단위와 구별됩니다. 기본 리터럴 문자 집합에 없는 문자는 둘 이상의 코드 단위로 인코딩될 수 있습니다. 이러한 코드 단위의 값은 기본 리터럴 문자 집합 요소에 대한 코드 단위 값과 동일할 수 있습니다. 실행 문자 집합의 인코딩은 모든 리터럴 인코딩과 관련이 없을 수 있습니다.
일반 리터럴 인코딩은 일반 문자 또는 문자열 리터럴에 적용되는 인코딩입니다. 와이드 리터럴 인코딩은 와이드 문자 또는 문자열 리터럴에 적용되는 인코딩입니다.
U+0000 NULL 문자는 값 0으로 인코딩됩니다. 변환 문자 집합의 다른 어떤 요소도 값 0의 코드 단위로 인코딩되지 않습니다. 숫자 0(U+0030) 이후의 각 십진수 숫자 문자의 코드 단위 값은 이전 값보다 하나 더 커야 합니다. 일반 및 와이드 리터럴 인코딩은 그 외에는 구현에 따라 정의됩니다.
UTF-8, UTF-16 또는 UTF-32 리터럴의 경우, 변환 문자 집합의 각 문자에 해당하는 UCS 스칼라 값은 각각의 UCS 인코딩 형식에 대해 ISO/IEC 10646에 명시된 대로 인코딩됩니다.
참고 사항
일부 문자 집합의 표준 이름이 C++23에서 P2314R4 를 통해 변경되었습니다.
| 새로운 이름 | 기존 이름 |
|---|---|
| 기본 문자 집합 | 기본 소스 문자 집합 |
| 기본 리터럴 문자 집합 |
기본 실행 문자 집합
기본 실행 와이드 문자 집합 |
소스 파일 (UTF-8 소스 파일이 아닌 경우) (since C++23) 의 문자들을 기본 문자 집합 (until C++23) 변환 문자 집합 (since C++23) 으로 매핑하는 것은 번역 단계 1 동안 구현에 따라 정의되므로, 구현체는 기본 소스 문자가 소스 파일에서 어떻게 표현되는지 문서화해야 합니다.
결함 보고서
다음 동작 변경 결함 보고서는 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| CWG 788 | C++98 |
실행 문자 집합 멤버들의 값은 구현에 따라 정의되었으나,
로케일 특정적이지 않았음 |
로케일 특정적임 |
| CWG 1796 | C++98 |
기본 실행 (와이드) 문자 집합에서 널 (와이드) 문자 표현이
모든 비트가 0이었음 |
값이 0이기만 하면 됨 |
참고 항목
| ASCII 차트 | |
|
C 문서
for
문자 집합과 인코딩
|