/Zc:u8EscapeEncoding (Codierung numerischer Escape-Sequenzen in u8-Zeichenfolgen)

Behalten Sie den Wert numerischer Escape-Sequenzen in u8 Zeichenfolgenliteralen bei, ohne sie als UTF-8 zu kodieren.

Verwenden Sie diesen Schalter, um die plattformübergreifende Kompatibilität zu verbessern oder wenn ein Nicht-UTF-8-Zeichen in einem UTF-8-Stringliteral enthalten ist.

Syntax

/Zc:u8EscapeEncoding[-]

Remarks

In C++ sind u8 Stringliterale UTF-8-kodierte Sequenzen von char8_t. Dieses Flag ändert, wie numerische Escape-Sequenzen in String-Literalen von u8 interpretiert werden. Das Verhalten unter /Zc:u8EscapeEncoding ist, sie in der Zeichenfolge als einen einzelnen 8-Bit-char8_t-Wert zu codieren. Das Verhalten unter /Zc:u8EscapeEncoding- besteht darin, den Wert als Unicode-Codepunkt zu interpretieren. Wenn der Wert ein höherer Codepunkt in Unicode ist, wird er als Multibyte-Zeichen codiert. Das Verhalten universeller Zeichensequenzen besteht immer darin, sie unabhängig von /Zc:u8EscapeEncoding[-]utf-8 zu codieren.

Das folgende Beispiel enthält sowohl eine Hex-Escapesequenz \x als auch eine universelle Escapesequenz \u. /Zc:u8EscapeEncoding[-] wirkt sich auf die Codierung der Hex-Escapesequenz aus, aber die universelle Escapesequenz wird immer als utf-8 codiert. Die Beispielzeichenfolge enthält auch das Leerzeichen, das wie 0x20 in utf-8 codiert ist.

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

Unter /Zc:u8EscapeEncoding ist die Escape-Sequenz \x00ff als 0xFF codiert, und die universelle Zeichensequenz \u00ff ist als utf-8-Sequenz 0xC3 0xBF codiert. Das Codebeispiel gibt Folgendes aus:

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

Unter /Zc:u8EscapeEncoding- werden die Werte sowohl von \x00ff als auch von \u00ff als die UTF-8-Sequenz 0xC3 0xBF neu codiert. Das Codebeispiel gibt Folgendes aus:

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

Siehe auch

/Zc (Konformität)