/Zc:u8EscapeEncoding (codificação de sequência de escape numérica em cadeias de caracteres u8)

Mantenha o valor das sequências de escape numéricas em literais de string u8 sem codificá-las em UTF-8.

Use essa opção para aumentar a compatibilidade cruzada ou quando um caractere não utf-8 é inserido em um literal de cadeia de caracteres utf-8.

Sintaxe

/Zc:u8EscapeEncoding[-]

Remarks

Em C++, u8 literais de string são sequências de char8_t codificadas em UTF-8. Esse sinalizador altera a maneira como as sequências de escape numéricas são interpretadas nos literais de cadeia de caracteres u8. O comportamento sob /Zc:u8EscapeEncoding é codificá-los na string como um único valor char8_t de 8 bits. O comportamento abaixo /Zc:u8EscapeEncoding- é interpretar o valor como um ponto de código unicode. Quando o valor é um ponto de código mais alto no Unicode, ele é codificado como um caractere multibyte. O comportamento das sequências de caracteres universais é sempre codificá-las em UTF-8, independentemente de /Zc:u8EscapeEncoding[-].

O exemplo a seguir contém uma sequência de escape hex \x e uma sequência de escape universal \u. /Zc:u8EscapeEncoding[-] afeta a codificação da sequência de escape hex, mas a sequência de escape universal sempre é codificada como utf-8. A cadeia de caracteres de exemplo também inclui o caractere de espaço, que é codificado como 0x20 em utf-8.

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

Em /Zc:u8EscapeEncoding, a sequência de escape \x00ff é codificada como 0xFF e a sequência de caracteres universais \u00ff é codificada como a sequência UTF-8 0xC3 0xBF. O exemplo de código produz a seguinte saída:

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

Em /Zc:u8EscapeEncoding-, os valores de \x00ff e \u00ff são recodificados como a sequência UTF-8 0xC3 0xBF. O exemplo de código produz a seguinte saída:

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

Consulte também

/Zc (Conformidade)