最近做了乙個需要支援
unicode的
專案,現在把程式設計中一些心得總結一下。1、
tchar ,unicode,char,wchar_t
之間的關係
經常發現有的人愛用
strcpy
等標準ansi
函式,有的人愛用
_t***x
函式,這個問題曾經搞的很混亂。為了統一,有必要搞清楚它們之間的關係。
為了搞清這些函式,就必須理請幾種字元型別的寫法。
char
就不用說了,先說一些
wchar_t
。wchar_t
是unicode
字元的資料型別,它實際定義在
裡:typedef unsigned short wchar_t;
不能使用類似
strcpy
這樣的ansi c
字串函式來處理
wchar_t
字串,必須使用
wcs字首的函式,例如
wcscpy
。為了讓編譯器識別
unicode
字串,必須以在前面加乙個「l」
,例如:
wchar_t *sztest=l"this is a unicode string.";
下面在看看
tchar
。如果你希望同時為
ansi
和unicode
編譯的源**,那就要
include tchar.h
。tchar
是定義在其中的乙個巨集,它視你是否定義了
_unicode
巨集而定義成
char
或者wchar_t
。如果你使用了
tchar
,那麼就不應該使用
ansi
的str***
函式或者
unicode
的wcs***
函式了,而必須使用
tchar.h
中定義的
_tcs***
函式。另外,為了解決剛才提到帶「
l」的問題,
tchar.h
中定義了乙個巨集:「
_text」。以
strcpy
函式為例子,總結一下:
.如果你想使用
ansi
字串,那麼請使用這一套寫法:
char szstring[100];
strcpy(szstring,"test"); .
如果你想使用
unicode
字串,那麼請使用這一套:
wchar_t szstring[100];
wcscpyszstring,l"test"); .
如果你想通過定義
_unicode
巨集,而編譯
ansi
或者unicode
字串**:
tchar szstring[100];
_tcscpy(szstring,_text("test")); 2
、增加unicode
巨集定義unicode,_unicode 3
、如何在調式程式中顯示
unicode
字元,需要在
vc開發工具「
tools
」—>
「options」à
「debug
」頁中勾選「
display unicode strings
」選項。如圖
4、使用unicode
的問題wwinmaincrtstartup
設定程式入口
project-> settings->link
在category
:選擇output
在entry point symbol
:加上wwinmaincrtstartup
5、幾種編碼之間的轉換
//utf8
格式轉換成
gb格式
cstring convertutf8togbk(cstring strutf8)
//gb
格式轉換成
utf8
格式cstring convertgbktoutf8(cstring strgbk)
//字串轉換
float
float strtofloat(cstring str)
//utf8
轉換成unicdoe
wchar_t* u8tounicode(const char* szu8)
//unicode
轉換成utf8
char* unicodetou8(wchar_t* wszstring)
//unicode
轉換成ansi
char* unicodetoansi(wchar_t* wszstring)
UNICODE編碼細節與個人使用總結
1 tchar unicode,char,wchar t 之間的關係 經常發現有的人愛用strcpy等標準ansi函式,有的人愛用 t x函式,這個問題曾經搞的很混亂。為了統一,有必要搞清楚它們之間的關係。為了搞清這些函式,就必須理請幾種字元型別的寫法。char就不用說了,先說一些wchar t。w...
Unicode與UTF 8編碼規則轉換
size medium unicode符號範圍 utf 8編碼方式 十六進製制 二進位制 size 0000 0000 0000 007f 0 x 0000 0080 0000 07ff 110 xx 10 0000 0800 0000 ffff 1110 x 10 10 0001 0000 001...
Unicode是什麼編碼,與ASCII的關係
今天在看python的轉義字元的時候,在字串中寫 u x的時候出現錯誤 syntaxerror unicodeerror,於是搜了一下unicode。1 utf 32 將字元的unicode編號直接轉換成二進位制儲存。使用4個位元組,即32位。2 utf 16 utf 16使用變長位元組表示,使用2...