/Zc:u8EscapeEncoding (kódování numerických řídicích posloupností v řetězcích u8)

Zachovejte hodnotu číselných únikových sekvencí v literálech řetězců u8 , aniž by byly kódovány jako UTF-8.

Tento přepínač použijte pro zajištění širší kompatibility nebo pokud je do řetězcového literálu UTF-8 vložen znak, který není v UTF-8.

Syntax

/Zc:u8EscapeEncoding[-]

Remarks

V jazyce C++ jsou u8 řetězcové literály posloupnosti char8_t kódované v UTF-8. Tento příznak změní způsob interpretace číselných řídicích sekvencí v u8 řetězcových literálech. Chování v rámci /Zc:u8EscapeEncoding spočívá v jejich zakódování do řetězce jako jediné 8bitové hodnoty char8_t. Chování pod /Zc:u8EscapeEncoding- spočívá v interpretaci hodnoty jako bodu kódu Unicode. Pokud je hodnota vyšším bodem kódu v Kódu Unicode, je kódována jako vícebajtový znak. Posloupnosti univerzálních znaků se vždy kódují jako UTF-8 bez ohledu na /Zc:u8EscapeEncoding[-].

Následující příklad obsahuje hexadecimální řídicí sekvenci \x a univerzální řídicí sekvenci \u. /Zc:u8EscapeEncoding[-] ovlivňuje kódování hexadecimální escape sekvence, ale univerzální escape sekvence je vždy kódována v UTF-8. Ukázkový řetězec obsahuje také znak mezery, který je kódován jako 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;
}

V /Zc:u8EscapeEncoding je escape sekvence \x00ff zakódována jako 0xFF a sekvence univerzálního znaku \u00ff je zakódována jako sekvence UTF-8 0xC3 0xBF. Výstupy v příkladu kódu:

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

V /Zc:u8EscapeEncoding- jsou hodnoty jak \x00ff, tak \u00ff překódovány jako posloupnost UTF-8 0xC3 0xBF. Výstupy v příkladu kódu:

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

Viz také

/Zc (shoda)