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

Manter o valor das sequências de escape numéricas nos literais de cadeia u8 sem as codificar como UTF-8.

Use este interruptor para aumentar a compatibilidade cruzada ou quando um carácter não-utf-8 está incorporado numa literal de cadeia utf-8.

Sintaxe

/Zc:u8EscapeEncoding[-]

Remarks

Em C++, u8 literais de cadeia de caracteres são sequências de char8_t codificadas em UTF-8. Esta opção altera a forma como as sequências de escape numéricas são interpretadas em literais de cadeia u8. O comportamento com /Zc:u8EscapeEncoding é codificá-los na string como um único valor char8_t de 8 bits. O comportamento sob /Zc:u8EscapeEncoding- é interpretar o valor como um ponto de código unicode. Quando o valor é um ponto de código superior no Unicode, é codificado como um carácter de vários bytes. O comportamento das sequências de caracteres universais é sempre codifica-las como utf-8 independentemente de /Zc:u8EscapeEncoding[-].

O exemplo seguinte contém tanto uma sequência de escape hexadecimal \x como uma sequência universal de escape \u. /Zc:u8EscapeEncoding[-] afeta a codificação da sequência de escape hexadecimal, mas a sequência universal de escape é sempre codificada como utf-8. A cadeia de exemplo inclui também o carácter 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 universal de caracteres \u00ff é codificada como a sequência UTF-8 0xC3 0xBF. O exemplo de código resulta:

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

Sob /Zc:u8EscapeEncoding-, os valores de ambos \x00ff e \u00ff são recodificados como a sequência 0xC3 0xBFutf-8 . O exemplo de código resulta:

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

Ver também

/Zc (Conformidade)