四字符集和字元編碼說明
五 其他
c++ 基本資料型別中表示字元有兩種:char wchar_t
char 叫多位元組字元,乙個char佔乙個位元組,之所以叫多位元組字元是因為它表示乙個字時可能是乙個位元組也可能是多個位元組。乙個英文本元(如』s』)用乙個char(乙個位元組)表示,乙個中文漢字(如』中』)用3個char(三個位元組)表示
wchar_t被稱為寬字元,乙個wchar_t佔2個位元組。之所以叫寬字元是因為所有的字都要用兩個位元組(即乙個wchar_t)來表示,不管是英文還是中文
string與wstring
字元陣列可以表示乙個字串,但它是乙個定長的字串,我們在使用之前必須知道這個陣列的長度。為方便字串的操作,stl為我們定義好了字串的類string和wstring。大家對string肯定不陌生,但wstring可能就用的少了。
string是普通的多位元組版本,是基於char的,對char陣列進行的一種封裝。
wstring是unicode版本,是基於wchar_t的,對wchar_t陣列進行的一種封裝
1 跨平台方法
#include #include #include string
std::string wstring2string(const std::wstring& ws)
// string => wstring
std::wstring string2wstring(const std::string& s)
2 windows wstirng 轉 string
static std::string ws2s(const std::wstring& ws)
3 mfc cstring 轉 string
static std::string cstring2string(cstring csstrdata)
(1 ) l
字串(literal string)前面的大寫字母l,用來告訴編譯器該字串應該作為unicode來編譯。它用來將asni轉換為unicode,unicode字串中每個字元佔16位(兩個位元組),而在asni中每個字元占用乙個位元組。
(2)_t、_text 效果相同
_t是乙個巨集,如果專案使用了unicode字符集(定義了unicode巨集),則自動在字串前面加上l,否則字串不變。visual c++裡邊定義字串的時候,用_t來保證相容性。vc支援ascii和unicode兩種字元型別,用_t可以保證從ascii編碼型別轉換到unicode編碼型別的時候,程式不需要修改
tchar.h中定義如下:
參考文件:
1 vs 編寫通訊**注意點
在編寫通訊程式中, 通訊內容要求utf-8格式。 需要產看一下vs輸出的編碼格式, 如果是gb2312格式,則需要將漢字轉換成utf-8格式
1 gb2312 轉 utf-8
wstatic char* g2u (const char* gb2312)
2 utf-8 轉 gb2312
char* u2g(const char* utf8)
2 vs2017 可修改編碼 方法如下: 字元編碼 unicode編碼
1.ascii american standard code for information interchange 美國資訊交換標準 這是計算機上最早使用的通用的編碼方案。那個時候計算機還只是拉丁文本的專利,根本沒有想到現在計算機的發展勢頭,如果想到了,可能一開始就會使用unicode了。當時絕大...
Unicode字元編碼
ascii碼 最早的字元編碼,使用乙個byte的7位來表示128種字元 控制字元,控制符,小寫字母,大寫字母,數字,標點,運算子等 然而對於英語國家來說,基本夠用 但對於使用非英文本元的國家來說,就不夠用了。擴充套件ascii碼 為了滿足需要,各國在相容ascii碼的基礎上對128 155等位元組進...
字符集 編碼和Unicode
部分來自 深入理解c 11 在計算機中,總是使用二進位制位組合來表示複雜的資訊。首當其衝需要被標識的就是字元。為了使二進位制組合標識字元的方法在不同設計的計算機間通用,就迫切需要統一的字元編碼方法。於是在20世紀60年代的時候,ascii字元編碼就出現了。在ansi頒布的標準中,基本ascii的字元...