以空字元終止的多位元組字串
出自 cppreference.com
以空字元終止的多位元組字串(Null-terminated multibyte string, NTMBS),或稱「多位元組字串」,是一串非零位元組序列,後接一個值為零的位元組(終止空字元)。
字串中儲存的每個字元可能會佔用多於一個位元組。用於表示多位元組字元字串的編碼方式取決於語系(locale):它可以是 UTF-8、GB18030、EUC-JP、Shift-JIS 等。例如,char 陣列 {'\xe4','\xbd','\xa0','\xe5','\xa5','\xbd','\0'} 是一個 NTMBS,在 UTF-8 多位元組編碼中包含字串 "你好":前三個位元組編碼字元「你」,後三個位元組編碼字元「好」。同樣的字串若以 GB18030 編碼,則為 char 陣列 {'\xc4', '\xe3', '\xba', '\xc3', '\0'},其中這兩個字元各以兩位元組序列進行編碼。
在某些多位元組編碼中,任何給定的多位元組字元序列可能會根據先前的位元組序列表示不同的字元,這被稱為「移位序列(shift sequences)」。此類編碼稱為狀態相依(state-dependent):需要了解當前的移位狀態才能解讀每個字元。只有當 NTMBS 以初始移位狀態開始並結束時,它才是有效的:如果使用了移位序列,則在終止空字元之前必須存在對應的取消移位序列。此類編碼的範例包括 BOCU-1 和 SCSU。
多位元組字元字串與以空字元終止的位元組字串(NTBS)在佈局上是相容的,也就是說,除了計算字元數量外,可以使用相同的機制進行儲存、複製和檢查。若啟用了正確的語系,I/O 函式也能處理多位元組字串。多位元組字串可以使用下列依賴於語系的轉換函式與寬字串進行相互轉換。
目錄 |
[編輯] 函式
多位元組/寬字元轉換 | |
| 定義於標頭檔
<stdlib.h> | |
| 回傳下一個多位元組字元的位元組數 (函式) | |
| 將下一個多位元組字元轉換為寬字元 (函式) | |
| (C11) |
將寬字元轉換為其多位元組表示 (函式) |
| (C11) |
將窄多位元組字元字串轉換為寬字串 (函式) |
| (C11) |
將寬字串轉換為窄多位元組字元字串 (函式) |
| 定義於標頭檔
<wchar.h> | |
| (C95) |
檢查 mbstate_t 物件是否表示初始移位狀態 (函式) |
| (C95) |
若可能,將單位元組窄字元擴展為寬字元 (函式) |
| (C95) |
若可能,將寬字元縮減為單位元組窄字元 (函式) |
| (C95) |
在給定狀態下,回傳下一個多位元組字元的位元組數 (函式) |
| (C95) |
在給定狀態下,將下一個多位元組字元轉換為寬字元 (函式) |
| (C95)(C11) |
在給定狀態下,將寬字元轉換為其多位元組表示 (函式) |
| (C95)(C11) |
在給定狀態下,將窄多位元組字元字串轉換為寬字串 (函式) |
| (C95)(C11) |
在給定狀態下,將寬字串轉換為窄多位元組字元字串 (函式) |
| 定義於標頭
<uchar.h> | |
| (C23) |
將窄多位元組字元轉換為 UTF-8 編碼 (函式) |
| (C23) |
將 UTF-8 字串轉換為窄多位元組編碼 (函式) |
| (C11) |
將窄多位元組字元轉換為 UTF-16 編碼 (函式) |
| (C11) |
將 UTF-16 字元轉換為窄多位元組編碼 (函式) |
| (C11) |
將窄多位元組字元轉換為 UTF-32 編碼 (函式) |
| (C11) |
將 UTF-32 字元轉換為窄多位元組編碼 (函式) |
[編輯] 型別
| 定義於標頭
<uchar.h> | |
| 定義於標頭檔
<wchar.h> | |
| (C95) |
迭代多位元組字元字串所需的轉換狀態資訊 (類別) |
| 定義於標頭
<uchar.h> | |
| (C23) |
8 位元字元型別 (typedef) |
| (C11) |
16 位元字元型別 (typedef) |
| (C11) |
32 位元字元型別 (typedef) |
[編輯] 巨集
| 定義於標頭
<limits.h> | |
| MB_LEN_MAX |
多位元組字元的最大位元組數(對於任何支援的語系) (巨集常數) |
| 定義於標頭檔
<stdlib.h> | |
| MB_CUR_MAX |
多位元組字元的最大位元組數(對於當前語系) (巨集變數) |
[編輯] 參考資料
- C23 標準 (ISO/IEC 9899:2024)
- 7.10 整數型別大小 <limits.h> (頁數:待定)
- 7.22 一般公用程式 <stdlib.h> (p: 待定)
- 7.28 Unicode 公用程式 <uchar.h> (頁數:待定)
- 7.29 擴充多位元組與寬字元公用程式 <wchar.h> (頁數:待定)
- 7.31.12 一般公用程式 <stdlib.h> (p: 待定)
- 7.31.16 擴充多位元組與寬字元公用程式 <wchar.h> (頁數:待定)
- K.3.6 一般公用程式 <stdlib.h> (頁數:待定)
- K.3.9 擴充多位元組與寬字元公用程式 <wchar.h> (頁數:待定)
- C17 標準 (ISO/IEC 9899:2018)
- 7.10 整數型別大小 <limits.h> (頁數:待定)
- 7.22 一般公用程式 <stdlib.h> (p: 待定)
- 7.28 Unicode 公用程式 <uchar.h> (頁數:待定)
- 7.29 擴充多位元組與寬字元公用程式 <wchar.h> (頁數:待定)
- 7.31.12 一般公用程式 <stdlib.h> (p: 待定)
- 7.31.16 擴充多位元組與寬字元公用程式 <wchar.h> (頁數:待定)
- K.3.6 一般公用程式 <stdlib.h> (頁數:待定)
- K.3.9 擴充多位元組與寬字元公用程式 <wchar.h> (頁數:待定)
- C11 標準 (ISO/IEC 9899:2011)
- 7.10 整數型別大小 <limits.h> (頁數:222)
- 7.22 一般公用程式 <stdlib.h> (p: 340-360)
- 7.28 Unicode 公用程式 <uchar.h> (頁數:398-401)
- 7.29 擴充多位元組與寬字元公用程式 <wchar.h> (頁數:402-446)
- 7.31.12 一般公用程式 <stdlib.h> (p: 456)
- 7.31.16 擴充多位元組與寬字元公用程式 <wchar.h> (頁數:456)
- K.3.6 一般公用程式 <stdlib.h> (頁數:604-614)
- K.3.9 擴充多位元組與寬字元公用程式 <wchar.h> (頁數:627-651)
- C99 標準 (ISO/IEC 9899:1999)
- 7.10 整數型別大小 <limits.h> (頁數:203)
- 7.20 一般公用程式 <stdlib.h> (p: 306-324)
- 7.24 擴充多位元組與寬字元公用程式 <wchar.h> (頁數:348-392)
- 7.26.10 一般公用程式 <stdlib.h> (p: 402)
- 7.26.12 擴充多位元組與寬字元公用程式 <wchar.h> (頁數:402)
- C89/C90 標準 (ISO/IEC 9899:1990)
- 4.1.4 限制 <float.h> 與 <limits.h>
- 4.10 一般公用程式 <stdlib.h>
- 4.13.7 一般工具 <stdlib.h>
[編輯] 參見
| C++ 文件 關於 以空字元終止的多位元組字串
|