/Zc:u8EscapeEncoding (u8 字串中的數值逸出序列編碼)

將數值逃逸序列保留在 u8 字串字面值中,但不要以 utf-8 編碼。

使用此開關可提高跨平台相容性,或用於非 UTF-8 字元嵌入於 UTF-8 字串常值中時。

語法

/Zc:u8EscapeEncoding[-]

Remarks

在 C++ 中,u8 字串字面值是以 utf-8 編碼的 char8_t 序列。 此旗標改變了數值跳脫序列在 u8 字串字面值中被解讀的方式。 在 /Zc:u8EscapeEncoding 之下,其行為是將它們編碼為字串中的單一 8 位元 char8_t 值。 以下 /Zc:u8EscapeEncoding- 行為是將該值解讀為 Unicode 代碼點。 當該值在 Unicode 中是較高的碼點時,會被編碼為多位元組字元。 通用字元序列的處理方式一律將其編碼為 utf-8,而不受 /Zc:u8EscapeEncoding[-] 影響。

以下範例同時包含十六進位跳脫序列 \x 與通用跳脫序列 \u。 /Zc:u8EscapeEncoding[-] 影響十六進位轉義序列的編碼,但通用轉義序列總是以 UTF-8 編碼。 範例字串也包含空格字元,其編碼方式與 utf-8 相同 0x20 。

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

在 /Zc:u8EscapeEncoding下,轉義序列 \x00ff 編碼為 0xFF ,而通用字元序列 \u00ff 則編碼為 utf-8 序列 0xC3 0xBF。 程式碼範例輸出為:

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

在 /Zc:u8EscapeEncoding-下,與 \x00ff 的\u00ff值會重新編碼為 utf-8 序列0xC3 0xBF。 程式碼範例輸出為:

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

另請參閱

/Zc(符合性)