多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > 有關unicode,UTF-8及 ANSI等編碼轉換

有關unicode,UTF-8及 ANSI等編碼轉換

來源:程序員人生   發布時間:2014-02-01 00:26:24 閱讀次數:2953次
1. ANSI
美國國家標準碼,操作系統默認的編碼格式;但是不同國家有不同的文字,由此各個國家制定了自己的國標碼,如GB2312等。注意,各個國家制定時還是按照ANSI準則進行的:即不屬于ASCII(0~127)的一個文字(符號)占兩個字節,屬于ASCII的占一個字節。這樣一來,一個大字符串用不同國標碼,解釋的結果就不同(但一點就是,屬于ASCII部分的字符解釋出來是相同的)。

ANSI是編碼,GB2312等國標碼是符合ANSI標準的字符集。字符集與編碼是兩回事。

2. 字符
字符是一個符號,如:'#','◎'等,存儲時根據不同的編碼標準可能占用1個或多個字節的空間。不同編碼標準下,字符占用空間大小不同,如Unicode編碼所有字符都是2個字節,utf-8編碼占用從1個到6個不等。

3. 多字節字符串:
字符串在內存中,如果“字符”是以ANSI編碼形式存放的,則一個字符可能使用一個字節或多個字節來表示,稱這個字符串為ANSI字符串或多字節字符串。

4. Unicode:
統一碼,任何字符都占兩個字節。各個國家文字、符號統一編碼。

VC++或其他編程工具對漢字或字符都采用操作系統的編碼標準,一般都是ANSI標準。這就涉及往其它編碼轉化的問題。

5. ANSI與Unicode
如果ANSI全部屬于ASCII(0~127),則 mbstowcs, wcstombs 即可。因為Unicode對ASCII(0~127)的處理是“直接擴展ANSI”--由一個字節到兩個字節。

size_t mbstowcs( wchar_t *wcstr, const char *mbstr, size_t count );
size_t wcstombs( char *mbstr, const wchar_t *wcstr, size_t count );對于不屬于ASCII的,如漢字,使用 WideCharToMultiByte,MultiByteToWideChar。

int MultiByteToWideChar(
UINT CodePage, // code page
DWORD dwFlags, // character-type options
LPCSTR lpMultiByteStr, // string to map
int cbMultiByte, // number of bytes in string
LPWSTR lpWideCharStr, // wide-character buffer
int cchWideChar // size of buffer
);
6. 多字節到寬字符(Unicode)
待轉換的字符并不一定是多字節字符串(ANSI字符串),uft-8編碼的也可以。

CodePage:待轉換的代碼頁,如CP_ACP(ANSI),utf-8;
dwFlags: 0;
lpMultiByteStr,cbMultiByte:待轉換
lpWideCharStr,cchWideChar:轉換完

int WideCharToMultiByte(
UINT CodePage, // code page
DWORD dwFlags, // performance and mapping flags
LPCWSTR lpWideCharStr, // wide-character string
int cchWideChar, // number of chars in string
LPSTR lpMultiByteStr, // buffer for new string
int cbMultiByte, // size of buffer
LPCSTR lpDefaultChar, // default for unmappable chars
LPBOOL lpUsedDefaultChar // set when default char used
);
7. 寬字符(Unicode)到多字節
新字符串不必是多字節(ANSI)字符集。

CodePag:要轉換成的代碼頁,如CP_ACP(ANSI),utf-8;
dwFlags:0;
lpWideCharStr,cchWideChar:待轉換
lpMultiByteStr,cbMultiByte:轉換完
lpDefaultChar,lpUsedDefaultChar:失敗時缺省字符;

一個字符串中有utf-8,如何轉換成ANSI?
首先,utf-8 到 Unicode
其次,Unicode 到 ANSI

代碼如下:

int ConvUtf8ToAnsi(CString& strSource, CString& strChAnsi)
{
if (strSource.GetLength() <= 0)
return 0;

CString strWChUnicode;

strSource.TrimLeft();
strSource.TrimRight();
strChAnsi.Empty();

int iLenByWChNeed = MultiByteToWideChar(CP_UTF8, 0,
strSource.GetBuffer(0),
strSource.GetLength(),
NULL, 0);

int iLenByWchDone = MultiByteToWideChar(CP_UTF8, 0,
strSource.GetBuffer(0),
strSource.GetLength(),
(LPWSTR)strWChUnicode.GetBuffer(iLenByWChNeed * 2),
iLenByWChNeed);

strWChUnicode.ReleaseBuffer(iLenByWchDone * 2);

int iLenByChNeed = WideCharToMultiByte(CP_ACP, 0,
(LPCWSTR)strWChUnicode.GetBuffer(0),
iLenByWchDone,
NULL, 0,
NULL, NULL);

int iLenByChDone = WideCharToMultiByte(CP_ACP, 0,
(LPCWSTR)strWChUnicode.GetBuffer(0),
iLenByWchDone,
strChAnsi.GetBuffer(iLenByChNeed),
iLenByChNeed,
NULL, NULL);

strChAnsi.ReleaseBuffer(iLenByChDone);

if (iLenByWChNeed != iLenByWchDone || iLenByChNeed != iLenByChDone)
return 1;

return 0;
}
8. Unicode 到 ANSI 其它方法
1. 調用CRT 函數wcstombs();
2. 使用CString 構造器或賦值操作(僅用于MFC );
3. 使用ATL 串轉換宏;

size_t wcstombs (
char* mbstr, // 接受結果ANSI串的字符(char)緩沖。
const wchar_t* wcstr, // 要轉換的Unicode串。
size_t count ); // mbstr參數所指的緩沖大小。
MFC中的CString包含有構造函數和接受Unicode串的賦值操作,所以你可以用CString來實現轉換。

// 假設有一個Unicode串wszSomeString...
CString str1 ( wszSomeString ); // 用構造器轉換
CString str2;
str2 = wszSomeString; // 用賦值操作轉換

ATL有一組很方便的宏用于串的轉換。W2A()用于將Unicode串轉換為ANSI串(記憶方法是“wide to ANSI”——寬字符到ANSI)。實際上使用OLE2A()更精確,“OLE”表示的意思是COM串或者OLE串。

9. VC6 IDE下查看Unicode字符的方法
unicode字符后面加",su"
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 图片区小说区校园 | 全国精品影院 | 亚洲视频影院 | www. 在线播放 | 精品国产91乱码一区二区三区 | 一级a毛片免费 | 最近中文字幕无 | 国产国产人在线成免费视频69 | 国内精品久久影视免费 | 欧美亚洲国产精品久久第一页 | 日本人护士免费xxxx视频 | 国产欧美一区二区三区免费看 | 精品国产日韩久久亚洲 | 国产激情一区二区三区在线观看 | 69av视频在线 | 国产精品永久免费视频观看 | 亚洲成aⅴ人片在线观 | 精品国产一区二区三区国产馆 | 成人在线一区二区三区 | 麻豆影视视频高清在线观看 | a级爱爱视频 | 99热久久这里只有精品首页 | 亚洲情a成黄在线观看动 | 亚洲精品久久久午夜伊人 | 免费成人在线播放 | 法国性xxxxx极品 | 日韩欧美视频在线一区二区 | 最近中文免费字幕在线播放 | 亚洲欧美综合另类图片小说区 | 成年人在线视频网站 | 欧美一级高清在线观看 | 一区二区在线视频 | 国产老肥熟xxxx | 国产一区二区三区国产精品 | 精品的一区二区三区 | 福利片视频区 | 午夜在线视频观看版 | 女人18毛片特级一级免费视频 | 五月天看片 | 亚洲国产日韩欧美高清片a 亚洲国产日韩欧美一区二区三区 | h视频在线播放 |