/Zc:u8EscapeEncoding (кодировка числовых escape-последовательностей в строках u8)

Сохраняйте значение числовых экранирующих последовательностей в строковых литералах u8, не кодируя их в UTF-8.

Используйте этот переключатель для повышения кросс-совместимости или если в строковом литерале UTF-8 содержится символ в кодировке, отличной от UTF-8.

Syntax

/Zc:u8EscapeEncoding[-]

Remarks

В C++ u8 строковые литералы — это последовательности char8_tв кодировке utf-8. Этот флаг изменяет способ интерпретации числовых escape-последовательностей в u8 строковых литералах. Поведение при /Zc:u8EscapeEncoding заключается в кодировании их в строке как одного 8-разрядного значения char8_t. Поведение при /Zc:u8EscapeEncoding- состоит в том, чтобы интерпретировать значение как кодовую точку Юникода. Если значение является более высокой точкой кода в Юникоде, оно закодировано как многобайтовый символ. Поведение последовательностей универсальных символов всегда заключается в том, чтобы кодировать их как utf-8 независимо от /Zc:u8EscapeEncoding[-].

Следующий пример содержит как шестнадцатеричную управляющую последовательность \x, так и универсальную управляющую последовательность \u. /Zc:u8EscapeEncoding[-] влияет на кодировку шестнадцатеричной управляющей последовательности, но универсальная управляющая последовательность всегда кодируется в UTF-8. Пример строки также содержит символ пробела, который кодируется как 0x20 в utf-8.

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

В разделе /Zc:u8EscapeEncoding управляющая последовательность \x00ff кодируется как 0xFF, а последовательность универсальных символов \u00ff кодируется как последовательность utf-8 0xC3 0xBF. Пример кода выводит:

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

В разделе /Zc:u8EscapeEncoding-значения обоих \x00ff и \u00ff повторно кодируются в виде последовательности 0xC3 0xBFutf-8. Пример кода выводит:

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

См. также

/Zc (соответствие)