UNICODE編碼細節與個人使用總結

2021-04-30 08:09:13 字數 2444 閱讀 7884

最近做了乙個需要支援

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...