WINDOWS 中 UNICODE的轉換

2021-07-08 09:20:45 字數 2012 閱讀 1582

#include "windows.h"

需要引用該標頭檔案,使用 wchar、multibytetowidechar、widechartomultibyte

編碼知識:windows中ansi編碼為本地預設編碼,中文為gbk/gb2312,網路傳輸和linux等之中為utf-8。

unicode為當前最通用的乙個編碼集,utf-8為表示該編碼集的一種方式。所以字串轉換編碼時都通過unicode為中間編碼進行轉換。

windows系統編碼:

ansi :為gbk(gb2312)編碼。

wchar : 為unicode編碼

**頁變數:指定執行轉換的字符集,這個引數可以為系統已安裝或有效的任何字符集所給定的值。

cp_acp:ansi字符集。 cp_maccp:macintosh**頁。 cp_oemcp:oem**頁。

cp_symbol:符號字符集(42)。 cp_thread_acp:當前執行緒ansi**頁。

cp_utf7:使用utf-7轉換。 cp_utf8:使用utf-8轉換。

int multibytetowidechar( uint codepage, dword dwflags, lpcstr lpmultibytestr, int cchmultibyte, lpwstr lpwidecharstr, int cchwidechar);

引數說明:

codepage :表示當前為選擇該編碼集與unicode互相轉換。

dwflags : 表示對轉換進行額外控制,一般為0

lpmultibytestr : 指向被轉換的多位元組字串

cchmultibyte : 指定由引數 lpmultibytestr 指向的字串中位元組的個數。如果lpmultibytestr指定的字串以空字元終止,可以設定為-1(如果字串不是以空字元中止,設定為-1可能失敗,可能成功),此引數設定為0函式將失敗。

lpwidecharstr :指向接收被轉換字串的緩衝區。

cchwidechar :指定由引數lpwidecharstr指向的緩衝區的寬字元個數。若此值為零,函式返回緩衝區所必需的寬字元數,在這種情況下,lpwidecharstr中的緩衝區不被使用。

int widechartomultibyte( uint codepage, dword dwflags, lpcwstr lpwidecharstr, int cchwidechar, lpstr lpmultibytestr, int cchmultibyte, lpcstr lpdefaultchar, lpbool pfuseddefaultchar);

引數說明:

codepage :表示當前為選擇該編碼集與unicode互相轉換。

dwflags : 表示對轉換進行額外控制,一般為0

lpwidecharstr :指向將被轉換的unicode字串。

cchwidechar :指定由引數lpwidecharstr指向的緩衝區的字元個數。如果這個值為-1,字串將被設定為以null為結束符的字串,並且自動計算長度。

lpmultibytestr :指向接收被轉換字串的緩衝區。

cchmultibyte :指定由引數lpmultibytestr指向的緩衝區最大值(用位元組來計量)。若此值為零,函式返回lpmultibytestr指向的目標緩衝區所必需的位元組數,在這種情況下,lpmultibytestr引數通常為null。

返回值:

如果函式執行成功,並且cchwidechar不為零,返回值是由lpwidecharstr指向的緩衝區中寫入的寬字元數;如果函式執行成功,並且cchwidechar為零,返回值是接收到待轉換字串的緩衝區所需求的寬字元數大小。如果函式執行失敗,返回值為零。若想獲得更多錯誤資訊,請呼叫getlasterror函式。它可以返回下面所列錯誤**:

error_insufficient_buffer;error_invalid_flags;

error_invalid_parameter;error_no_unicode_translation。

Windows 程式設計入門(一) Unicode

by wjb date 2018 08 03 本質上,unicode 使用16位數表示字元。unicode字符集很大,它可以支援世界上很多國家的語言文字或其他符號。在 c 中,我們用寬字元型別 wchar t 來表示 unicode 字元。在 32 和 64 位windows 中,wchar t 都...

04 Windows程式設計 Unicode

vs 2017下原始碼 1 include2 3int main 4view code 執行結果 對於寬字串,如果使用printf w str s n w str 可能不會列印出完整的字串,而只顯示第乙個字元。其原因是因為 寬字元占用2byte,第二個位元組就是 0。printf以為自己到頭了,所以...

2 Windows程式設計 Unicode

unicode字符集和ascii碼字符集 下面是 示例 ascii碼字符集 unicode字符集 通用版本字符集 程式1 include include include include include ascii碼字符集 雙位元組字符集 多位元組字符集 int main unicode寬字符集 in...