日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

CString與utf

 行走在理想邊緣 2019-04-17
//string類型的utf-8字符串轉為CString類型的unicode字符串
CString ConvertUTF8ToCString( std::string utf8str )
{
    /* 預轉換,得到所需空間的大小 */
    int nLen = ::MultiByteToWideChar( CP_UTF8, NULL,
                      utf8str.data(), utf8str.size(), NULL, 0 );
    /* 轉換為Unicode */
    std::wstring wbuffer;
    wbuffer.resize( nLen );
    ::MultiByteToWideChar( CP_UTF8, NULL, utf8str.data(), utf8str.size(),
                   (LPWSTR) (wbuffer.data() ), wbuffer.length() );

#ifdef UNICODE
    return(CString( wbuffer.data(), wbuffer.length() ) );
#else
    /*
     * 轉換為ANSI
     * 得到轉換后長度
     */
    nLen = WideCharToMultiByte( CP_ACP, 0,
                    wbuffer.data(), wbuffer.length(), NULL, 0, NULL, NULL );

    std::string ansistr;
    ansistr.resize( nLen );

    /* 把unicode轉成ansi */
    WideCharToMultiByte( CP_ACP, 0, (LPWSTR) (wbuffer.data() ), wbuffer.length(),
                 (LPSTR) (ansistr.data() ), ansistr.size(), NULL, NULL );
    return(CString( ansistr.data(), ansistr.length() ) );
#endif
}
//CString類型的unicode字符串轉為string類型的utf-8字符串
string _UnicodeToUtf8(CString Unicodestr)
{
        wchar_t* unicode = Unicodestr.AllocSysString();
	int len;
	len = WideCharToMultiByte(CP_UTF8, 0, unicode, -1, NULL, 0, NULL, NULL);
	char *szUtf8 = (char*)malloc(len + 1);
	memset(szUtf8, 0, len + 1);
	WideCharToMultiByte(CP_UTF8, 0, unicode, -1, szUtf8, len, NULL, NULL);
	string result = szUtf8;
	free(szUtf8);
	return result;
}
//string轉const char*
string str = "abc";
const char* result= str.c_str();
//CString轉char*
CString str;
USES_CONVERSION;
char * result= T2A(str);
//判斷字符是否為UTF-8編碼方式,是就返回true,否則返回false
bool _is_str_utf8(string src)
{
    const char* str= src.c_str();
	unsigned int nBytes = 0;//UFT8可用1-6個字節(jié)編碼,ASCII用一個字節(jié)
	unsigned char chr = *str;
	bool bAllAscii = true;
	for (unsigned int i = 0; str[i] != '\0'; ++i){
		chr = *(str + i);
		//判斷是否ASCII編碼,如果不是,說明有可能是UTF8,ASCII用7位編碼,最高位標記為0,0xxxxxxx
		if (nBytes == 0 && (chr & 0x80) != 0){
			bAllAscii = false;
		}
		if (nBytes == 0) {
			//如果不是ASCII碼,應該是多字節(jié)符,計算字節(jié)數
			if (chr >= 0x80) {
				if (chr >= 0xFC && chr <= 0xFD){
					nBytes = 6;
				}
				else if (chr >= 0xF8){
					nBytes = 5;
				}
				else if (chr >= 0xF0){
					nBytes = 4;
				}
				else if (chr >= 0xE0){
					nBytes = 3;
				}
				else if (chr >= 0xC0){
					nBytes = 2;
				}
				else{
					return false;
				}
				nBytes--;
			}
		}
		else{
			//多字節(jié)符的非首字節(jié),應為 10xxxxxx
			if ((chr & 0xC0) != 0x80){
				return false;
			}
			//減到為零為止
			nBytes--;
		}
	}
	//違反UTF8編碼規(guī)則
	if (nBytes != 0) {
		return false;
	}
	if (bAllAscii){ //如果全部都是ASCII, 也是UTF8
		return true;
	}
	return true;
}
//string轉CString
string str = "1234";
CString result = CString(str.c_str());

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多