以空字元終止的多位元組字串
以空字元終止的多位元組字串 (Null-terminated multibyte string, NTMBS),或稱「多位元組字串」,是一串非零位元組,後接一個值為零的位元組(終止空字元)。
字串中儲存的每個字元可能佔用超過一個位元組。用於表示多位元組字元字串的編碼取決於區域設定 (locale):可能是 UTF-8、GB18030、EUC-JP、Shift-JIS 等。例如,char 陣列 {'\xe4','\xbd','\xa0','\xe5','\xa5','\xbd','\0'} 是一個以 UTF-8 多位元組編碼儲存字串 "你好" 的 NTMBS:前三個位元組編碼了「你」字,後三個位元組編碼了「好」字。同樣的字串若以 GB18030 編碼,則為 char 陣列 {'\xc4', '\xe3', '\xba', '\xc3', '\0'},其中每個字元皆編碼為兩個位元組序列。
在某些多位元組編碼中,任何給定的多位元組字元序列可能會根據之前的位元組序列(稱為「位移序列」或 shift sequences)代表不同的字元。這類編碼稱為與狀態相關 (state-dependent):解析每個字元時需要了解當前的位移狀態。只有當 NTMBS 以初始位移狀態開始並結束時,它才是有效的:如果使用了位移序列,則在終止空字元之前必須存在相應的恢復原始狀態序列 (unshift sequence)。這類編碼的範例包括 7-bit JIS、BOCU-1 和 SCSU。
多位元組字元字串在佈局上與以空字元終止的位元組字串 (NTBS) 相容,意即它們可以使用相同的工具進行儲存、複製和檢查,唯獨計算字元數時除外。若已設定正確的區域設定,I/O 函式也能處理多位元組字串。多位元組字串可使用 std::codecvt 成員函式、std::wstring_convert 或以下與區域設定相關的轉換函式,與寬字串 (wide strings) 互相轉換。
目錄 |
[編輯] 函式
多位元組/寬字元轉換 | |
| 定義於標頭檔
<cstdlib> | |
| 回傳下一個多位元組字元的位元組數 (函式) | |
| 將下一個多位元組字元轉換為寬字元 (函式) | |
| 將寬字元轉換為其多位元組表示 (函式) | |
| 將窄多位元組字元字串轉換為寬字串 (函式) | |
| 將寬字串轉換為窄多位元組字元字串 (函式) | |
| 定義於標頭檔
<cwchar> | |
| 在給定狀態下,回傳下一個多位元組字元的位元組數 (函式) | |
| 檢查 std::mbstate_t 物件是否代表初始位移狀態 (函式) | |
| 若可能,將單位元組窄字元擴展為寬字元 (函式) | |
| 若可能,將寬字元縮減為單位元組窄字元 (函式) | |
| 在給定狀態下,將下一個多位元組字元轉換為寬字元 (函式) | |
| 在給定狀態下,將寬字元轉換為其多位元組表示 (函式) | |
| 在給定狀態下,將窄多位元組字元字串轉換為寬字串 (函式) | |
| 在給定狀態下,將寬字串轉換為窄多位元組字元字串 (函式) | |
| 定義於標頭檔
<cuchar> | |
| (C++20) |
將窄多位元組字元轉換為 UTF-8 編碼 (函式) |
| (C++20) |
將 UTF-8 字串轉換為窄多位元組編碼 (函式) |
| (C++11) |
將窄多位元組字元轉換為 UTF-16 編碼 (函式) |
| (C++11) |
將 UTF-16 字元轉換為窄多位元組編碼 (函式) |
| (C++11) |
將窄多位元組字元轉換為 UTF-32 編碼 (函式) |
| (C++11) |
將 UTF-32 字元轉換為窄多位元組編碼 (函式) |
[編輯] 類型
| 定義於標頭檔
<cwchar> | |
| 迭代多位元組字元字串所需的轉換狀態資訊 (類別) | |
[編輯] 巨集
| 定義於標頭檔
<climits> | |
| MB_LEN_MAX |
多位元組字元中的最大位元組數 (巨集常數) |
| 定義於標頭檔
<cstdlib> | |
| MB_CUR_MAX |
當前 C 區域設定下,多位元組字元中的最大位元組數 (巨集變數) |
| 定義於標頭檔
<cuchar> | |
| __STDC_UTF_16__ (C++11) |
指示 mbrtoc16 和 c16rtomb 使用 UTF-16 編碼 (巨集常數) |
| __STDC_UTF_32__ (C++11) |
指示 mbrtoc32 和 c32rtomb 使用 UTF-32 編碼 (巨集常數) |
[編輯] 參見
| C 文件 關於 以空字元終止的多位元組字串
|