/Zc:u8EscapeEncoding (u8 문자열의 숫자 이스케이프 시퀀스 인코딩)

숫자 이스케이프 시퀀스의 u8 값을 utf-8로 인코딩하지 않고 문자열 리터럴에 유지합니다.

교차 호환성을 높이거나 utf-8이 아닌 문자가 utf-8 문자열 리터럴에 포함된 경우 이 스위치를 사용합니다.

Syntax

/Zc:u8EscapeEncoding[-]

Remarks

C++에서 u8 문자열 리터럴은 char8_t의 UTF-8 인코딩 시퀀스입니다. 이 플래그는 숫자 이스케이프 시퀀스가 문자열 리터럴에서 u8 해석되는 방식을 변경합니다. /Zc:u8EscapeEncoding에서의 동작 방식은 문자열 내에서 이를 단일 8비트 char8_t 값으로 인코딩하는 것입니다. 아래 /Zc:u8EscapeEncoding- 동작은 값을 유니코드 코드 포인트로 해석하는 것입니다. 값이 유니코드의 상위 코드 포인트인 경우 멀티바이트 문자로 인코딩됩니다. 유니버설 문자 시퀀스의 동작은 항상 utf-8과 /Zc:u8EscapeEncoding[-]독립적으로 인코딩하는 것입니다.

다음 예제에서는 16진수 이스케이프 시퀀스 \x 와 유니버설 이스케이프 시퀀스 \u를 모두 포함합니다. /Zc:u8EscapeEncoding[-] 는 16진수 이스케이프 시퀀스의 인코딩에 영향을 주지만 유니버설 이스케이프 시퀀스는 항상 utf-8로 인코딩됩니다. 예제 문자열에는 utf-8로 0x20 인코딩된 공백 문자도 포함됩니다.

#include <cstdio>
int main()
{
    const char8_t str[] = u8" \x00ff \u00ff ";
    for(char8_t c : str) {
        printf("0x%X ", c);
    }
    return 0;
}

아래에서 /Zc:u8EscapeEncoding이스케이프 시퀀스는 \x00ff0xFF 인코딩되고 유니버설 문자 시퀀스는 \u00ff utf-8 시퀀스 0xC3 0xBF로 인코딩됩니다. 코드 예제는 다음을 출력합니다.

0x20 0xFF 0x20 0xC3 0xBF 0x20 0x0

아래 /Zc:u8EscapeEncoding-의 두 값은 utf-8 \x00ff\u00ff 시퀀스 0xC3 0xBF로 다시 인코딩됩니다. 코드 예제는 다음을 출력합니다.

0x20 0xC3 0xBF 0x20 0xC3 0xBF 0x20 0x0

참고하십시오

/Zc (적합성)