Namespaces
Variants

Character sets and encodings

From cppreference.net
C++ language
General topics
Flow control
Conditional execution statements
Iteration statements (loops)
Jump statements
Functions
Function declaration
Lambda function expression
inline specifier
Dynamic exception specifications ( until C++17* )
noexcept specifier (C++11)
Exceptions
Namespaces
Types
Specifiers
constexpr (C++11)
consteval (C++20)
constinit (C++20)
Storage duration specifiers
Initialization
Expressions
Alternative representations
Literals
Boolean - Integer - Floating-point
Character - String - nullptr (C++11)
User-defined (C++11)
Utilities
Attributes (C++11)
Types
typedef declaration
Type alias declaration (C++11)
Casts
Memory allocation
Classes
Class-specific function properties
Special member functions
Templates
Miscellaneous

이 페이지는 C++ 표준에 의해 지정된 여러 문자 집합을 설명합니다.

목차

번역 문자 집합

번역 문자 집합 은 다음 요소들로 구성됩니다:

  • Unicode 코드 공간에서 코드 포인트가 할당된 각 추상 문자, 그리고
  • 추상 문자에 할당되지 않은 각 Unicode 스칼라 값에 대한 고유 문자

번역 문자 집합은 기본 문자 집합과 기본 리터럴 문자 집합(아래 참조)의 상위 집합입니다.

(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

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 억음 악센트 `
(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 문자 집합과 인코딩