Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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