字串函式差異
本主題描述處理 Unicode 和字元集資訊時所使用的字串函式之間的差異。 這些函式同時 Unicode 和 Windows 代碼頁 實作,以支援 Unicode 和 Windows 代碼頁參數。
下列字串函式不需要特殊批注。 其 Unicode 和 Windows 代碼頁實作的運作方式相同。
其中一個字串長度函式所擷取的長度值一律是以一般字元寬度為基礎:Windows 代碼頁的 8 位,Unicode 為 16 位。 此值通常稱為「字元計數」。此字詞嚴格正確,因為使用 雙位元組位元集的Windows代碼頁 (DBCS) 有一些全角字元,實際上以兩個連續位元組表示。 Unicode 中 代理 也出現了類似的情況。
下列字串函式會區分目前線程的地區設定,衍生自使用者在控制面板中選取的語言。 lstrcmp 和 lstrcmpi 函式不會執行位元組比較,例如,strcmp。 相反地,它們會根據地區設定的規則來比較字串。
下列函式會根據所使用的版本,在 OEM 字元集與目前的 Windows 代碼頁或 Unicode 之間轉換:
列印函式,例如,StringCbPrintf支援 Unicode,方法是提供下列格式規格中新的和變更的數據類型。 這些格式規格會影響函式解譯對應輸入參數的方式。
格式規格 | Windows 代碼頁版本的數據類型 | Unicode 版本的數據類型 |
---|---|---|
c | 煳 | WCHAR |
C | WCHAR | 煳 |
hc、hC | 煳 | 煳 |
hs、hS | LPSTR | LPSTR |
lc、lC | WCHAR | WCHAR |
ls、lS | LPWSTR | LPWSTR |
s | LPSTR | LPWSTR |
S | LPWSTR | LPSTR |
輸出文字的數據類型一律取決於函式的版本。 當輸入參數的數據類型和輸出文字的數據類型不同意時,列印函式會視需要執行從 Unicode 轉換為目前 Windows 代碼頁的轉換,反之亦然。
針對列印函式的 Unicode 版本,格式字串為 Unicode,輸出文字也一樣。
謹慎
不良的緩衝區處理牽涉到涉及緩衝區滿溢的許多安全性問題。 請參閱 Strsafe.h 參考。 Strsafe.h 中定義的函式會為程式代碼中的適當緩衝區處理提供額外的處理。 因此,它們的目的是要取代其內建的 C/C++ 對應專案,以及特定Microsoft Windows 實作。 如需詳細資訊,請參閱 安全性考慮:國際功能。
相關主題
-
在 Windows API 中 Unicode