亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? utf8.cpp

?? utf8編碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
		ret = ::MultiByteToWideChar(CP_ACP,0,srcData,(int)srcCount,wstr,(int)destCount);
		if(ret == 0) ret = -1;
#else
		ret = ::mbstowcs(wstr, srcData,srcCount);
#endif
			if(ret < 0){
				throw UTF8ConvertError();
			}
			len = UNICODEToUTF8(wstr,ret,destData,destCount);
		}catch(...){
			free(wstr);
			throw;
		}
		free(wstr);
		return len;
	}
	DNC_DECLARE size_t UTF8ToANSI(custr srcData,size_t srcCount, astr destData,size_t destCount){
		wchar_t *wstr = (wchar_t*)malloc((destCount+1)*2);
		int ret = 0;
		try{
			size_t len = UTF8ToUNICODE(srcData,srcCount,wstr,destCount);
			wstr[len] = 0;
#if defined(_MSC_VER)
		ret = ::WideCharToMultiByte(CP_ACP,0,wstr,(int)len,destData,(int)len*2, NULL, NULL );
#else
		ret = ::wcstombs(destData,wstr,len*2);
#endif 
			if(ret < 0){
				throw UTF8ConvertError();
			}
		}catch(...){
			free(wstr);
			throw;
		}
		free(wstr);
		return ret;
	}
	DNC_DECLARE size_t UTF8ToUNICODE(custr srcData,size_t srcCount, wstr destData,size_t destCount){
		// Watch for pathological scenario. Shouldn't happen, but...
		if (!srcCount || !destCount)
			return 0;

		//
		//unsigned char charSizes[1024];
		unsigned int  bytesEaten;

		//
		//  Get pointers to our start and end points of the input and output
		//  buffers.
		//
		custr  srcPtr = srcData;
		custr  srcEnd = srcPtr + srcCount;
		wstr   outPtr = destData;
		wstr   outEnd = outPtr + destCount;
		//ustr   sizePtr = charSizes;



		//
		//  We now loop until we either run out of input data, or room to store
		//  output chars.
		//
		while ((srcPtr < srcEnd) && (outPtr < outEnd))
		{
			// Special-case ASCII, which is a leading byte value of <= 127
			if (*srcPtr <= 127)
			{
				*outPtr++ = wchar_t(*srcPtr++);
				//*sizePtr++ = 1;
				continue;
			}

			// See how many trailing src bytes this sequence is going to require
			const unsigned int trailingBytes = gUTFBytes[*srcPtr];

			//
			//  If there are not enough source bytes to do this one, then we
			//  are done. Note that we done >= here because we are implicitly
			//  counting the 1 byte we get no matter what.
			//
			//  If we break out here, then there is nothing to undo since we
			//  haven't updated any pointers yet.
			//
			if (srcPtr + trailingBytes >= srcEnd)
				break;

			// Looks ok, so lets build up the value
			// or at least let's try to do so--remembering that
			// we cannot assume the encoding to be valid:

			// first, test first byte
			if((gUTFByteIndicatorTest[trailingBytes] & *srcPtr) != gUTFByteIndicator[trailingBytes]) 
				throw UTF8FormatError(0,trailingBytes,*srcPtr,srcPtr-srcData);

			unsigned long tmpVal = *srcPtr++;
			tmpVal <<= 6;
			for(unsigned int i=1; i<trailingBytes; i++) 
			{
				if((*srcPtr & 0xC0) == 0x80) 
				{
					tmpVal += *srcPtr++; 
					tmpVal <<= 6;
				}else throw UTF8FormatError(i,trailingBytes,*srcPtr,srcPtr-srcData);
			}
			if((*srcPtr & 0xC0) == 0x80){
				tmpVal += *srcPtr++;
			}else throw UTF8FormatError(trailingBytes,trailingBytes,*srcPtr,srcPtr-srcData);

			// since trailingBytes comes from an array, this logic is redundant
			//  default :
			//      ThrowXML(TranscodingException, XMLExcepts::Trans_BadSrcSeq);
			//}
			tmpVal -= gUTFOffsets[trailingBytes];

			//
			//  If it will fit into a single char, then put it in. Otherwise
			//  encode it as a surrogate pair. If its not valid, use the
			//  replacement char.
			//
			if (!(tmpVal & 0xFFFF0000))	{
				//*sizePtr++ = trailingBytes + 1;
				*outPtr++ = wchar_t(tmpVal);
			}else if (tmpVal > 0x10FFFF){
				//
				//  If we've gotten more than 32 chars so far, then just break
				//  out for now and lets process those. When we come back in
				//  here again, we'll get no chars and throw an exception. This
				//  way, the error will have a line and col number closer to
				//  the real problem area.
				//
				if ((outPtr - destData) > 32)
					break;

				throw UTF8FormatError(srcPtr-srcData);
			}else{
				//
				//  If we have enough room to store the leading and trailing
				//  chars, then lets do it. Else, pretend this one never
				//  happened, and leave it for the next time. Since we don't
				//  update the bytes read until the bottom of the loop, by
				//  breaking out here its like it never happened.
				//
				if (outPtr + 1 >= outEnd)
					break;

				// Store the leading surrogate char
				tmpVal -= 0x10000;
				//*sizePtr++ = trailingBytes + 1;
				*outPtr++ = wchar_t((tmpVal >> 10) + 0xD800);

				//
				//  And then the treailing char. This one accounts for no
				//  bytes eaten from the source, so set the char size for this
				//  one to be zero.
				//
				//*sizePtr++ = 0;
				*outPtr++ = wchar_t(tmpVal & 0x3FF) + 0xDC00;
			}
		}

		// Update the bytes eaten
		bytesEaten = srcPtr - (unsigned char*)srcData;

		// Return the characters read
		return outPtr - destData;
	}


	DNC_DECLARE size_t UNICODEToUTF8(cwstr srcData,size_t srcCount,ustr destData,size_t destCount){
		// Watch for pathological scenario. Shouldn't happen, but...
		if (!srcCount || !destCount)
			return 0;

		//
		 unsigned int   charsEaten;

		//
		//  Get pointers to our start and end points of the input and output
		//  buffers.
		//
		cwstr    srcPtr = srcData;
		cwstr    srcEnd = srcPtr + srcCount;
		ustr     outPtr = destData;
		ustr     outEnd = destData + destCount;

		while (srcPtr < srcEnd)
		{
			//
			//  Tentatively get the next char out. We have to get it into a
			//  32 bit value, because it could be a surrogate pair.
			//
			unsigned long curVal = *srcPtr;

			//
			//  If its a leading surrogate, then lets see if we have the trailing
			//  available. If not, then give up now and leave it for next time.
			//
			unsigned int srcUsed = 1;
			if ((curVal >= 0xD800) && (curVal <= 0xDBFF))
			{
				if (srcPtr + 1 >= srcEnd)
					break;

				// Create the composite surrogate pair
				curVal = ((curVal - 0xD800) << 10)
						+ ((*(srcPtr + 1) - 0xDC00) + 0x10000);

				// And indicate that we ate another one
				srcUsed++;
			}

			// Figure out how many bytes we need
			unsigned int encodedBytes;
			if (curVal < 0x80)
				encodedBytes = 1;
			else if (curVal < 0x800)
				encodedBytes = 2;
			else if (curVal < 0x10000)
				encodedBytes = 3;
			else if (curVal < 0x200000)
				encodedBytes = 4;
			else if (curVal < 0x4000000)
				encodedBytes = 5;
			else if (curVal <= 0x7FFFFFFF)
				encodedBytes = 6;
			else
			{
				assert(0);
				// Else, use the replacement character
				//*outPtr++ = chSpace;
				//srcPtr += srcUsed;
				continue;
			}

			//
			//  If we cannot fully get this char into the output buffer,
			//  then leave it for the next time.
			//
			if (outPtr + encodedBytes > outEnd)
				break;

			// We can do it, so update the source index
			srcPtr += srcUsed;

			//
			//  And spit out the bytes. We spit them out in reverse order
			//  here, so bump up the output pointer and work down as we go.
			//
			outPtr += encodedBytes;
			switch(encodedBytes)
			{
				case 6 : *--outPtr = byte((curVal | 0x80UL) & 0xBFUL);
						curVal >>= 6;
				case 5 : *--outPtr = byte((curVal | 0x80UL) & 0xBFUL);
						curVal >>= 6;
				case 4 : *--outPtr = byte((curVal | 0x80UL) & 0xBFUL);
						curVal >>= 6;
				case 3 : *--outPtr = byte((curVal | 0x80UL) & 0xBFUL);
						curVal >>= 6;
				case 2 : *--outPtr = byte((curVal | 0x80UL) & 0xBFUL);
						curVal >>= 6;
				case 1 : *--outPtr = byte
						(
							curVal | gFirstByteMark[encodedBytes]
						);
			}

			// Add the encoded bytes back in again to indicate we've eaten them
			outPtr += encodedBytes;
		}

		// Fill in the chars we ate
		charsEaten = (srcPtr - srcData);

		// And return the bytes we filled in
		return (outPtr - destData);
	}

    DNC_DECLARE std::string UTF8ToANSI(const std::string &srcData){
        Array<char> destData(srcData.size()+1);
        size_t len = UTF8ToANSI((uchar*)srcData.c_str(),srcData.size(),destData,srcData.size()+1);
        destData[len] = 0;
        return destData.data();
    }
    DNC_DECLARE std::string ANSIToUTF8(const std::string &srcData){
        Array<uchar> destData(srcData.size()*3+1);
        size_t len = ANSIToUTF8(srcData.c_str(),srcData.size(),destData,srcData.size()*3+1);
        destData[len] = 0;
        return (char*)destData.data();
    }
}

#include "utf8.dnc"

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91热门视频在线观看| 美女视频免费一区| 99精品视频在线免费观看| 2020国产精品自拍| 久久成人免费电影| 精品人在线二区三区| 久久国产精品99精品国产| 欧美一区二区大片| 久99久精品视频免费观看| 欧美性生交片4| 亚洲成人综合视频| 欧美一区三区二区| 久久国产精品99精品国产 | 国产一区二区伦理| 欧美三级韩国三级日本一级| 一区二区三区四区不卡视频| 欧美另类z0zxhd电影| 三级在线观看一区二区| 欧美xxxx在线观看| 国产成人av电影| 亚洲裸体在线观看| 欧美无人高清视频在线观看| 日产国产高清一区二区三区| 欧美一级生活片| 精品一区二区三区久久| 亚洲国产成人自拍| 在线一区二区三区四区| 亚洲午夜在线电影| 精品伦理精品一区| 91在线一区二区| 亚洲第一激情av| 2020国产精品| 91国产视频在线观看| 丝袜亚洲精品中文字幕一区| 久久综合狠狠综合久久综合88 | 日韩毛片精品高清免费| 欧美日韩高清一区二区| 国产乱人伦偷精品视频不卡| 一区视频在线播放| 一本大道久久a久久综合婷婷| 亚洲已满18点击进入久久| 91精品福利在线一区二区三区| 亚洲国产精品人人做人人爽| 亚洲精品一线二线三线| 91浏览器入口在线观看| 日本特黄久久久高潮| 精品久久久久久无| 欧洲人成人精品| 精品在线免费观看| 亚洲制服欧美中文字幕中文字幕| 精品久久久久久最新网址| 一本大道久久a久久精品综合| 久久www免费人成看片高清| 亚洲精品一卡二卡| 久久免费的精品国产v∧| 欧美视频三区在线播放| 成人综合婷婷国产精品久久免费| 亚洲妇女屁股眼交7| xvideos.蜜桃一区二区| 在线免费观看日本欧美| 国产精品亚洲一区二区三区在线 | 欧美中文字幕亚洲一区二区va在线| 久草这里只有精品视频| 亚洲国产成人精品视频| 亚洲欧洲精品一区二区三区不卡 | 精品三级在线观看| 91看片淫黄大片一级在线观看| 蜜臀av性久久久久蜜臀av麻豆| 日韩美女啊v在线免费观看| 26uuu精品一区二区在线观看| 99久久精品国产一区| 国内精品写真在线观看| 日韩和欧美一区二区三区| 一本久久a久久免费精品不卡| 国产成人在线视频免费播放| 国产一二三精品| 国产精品66部| 国产精品一区不卡| 国产一区91精品张津瑜| 国产精品18久久久久| 国产激情一区二区三区四区| 国产精品自拍一区| 成人污视频在线观看| va亚洲va日韩不卡在线观看| 91麻豆免费看片| 欧美性xxxxxxxx| 欧美一区二区女人| 久久久www成人免费毛片麻豆| 久久精品亚洲麻豆av一区二区| 国产精品三级av在线播放| 亚洲天堂中文字幕| 亚洲国产精品久久人人爱蜜臀| 日本亚洲欧美天堂免费| 久久精品免费观看| 国产高清成人在线| 色综合久久久久综合99| 欧美日韩1区2区| 久久综合给合久久狠狠狠97色69| 国产日韩欧美精品电影三级在线| 中文字幕一区二区视频| 一区二区三区在线免费播放| 日韩成人av影视| 国产酒店精品激情| 色婷婷激情一区二区三区| 91精品国产欧美一区二区18 | 中文字幕在线播放不卡一区| 伊人性伊人情综合网| 日韩电影网1区2区| 国产成人精品网址| 色婷婷av一区二区三区gif| 7777精品伊人久久久大香线蕉超级流畅| 日韩久久久精品| 成人免费视频在线观看| 美女看a上一区| 正在播放亚洲一区| 欧美国产一区二区| 日韩国产精品久久久久久亚洲| 精品在线免费观看| 欧美色图在线观看| 亚洲国产高清在线观看视频| 五月天婷婷综合| 不卡区在线中文字幕| 日韩一级二级三级| 亚洲欧美日本在线| 国产精品一二一区| 欧美精品123区| 国产精品国产成人国产三级 | 欧美国产一区二区| 日本亚洲欧美天堂免费| 在线日韩国产精品| 欧美高清在线一区| 久久se精品一区精品二区| 欧美亚洲一区二区三区四区| 久久精品人人做人人综合| 青娱乐精品视频| 欧美三级电影在线看| 亚洲欧美在线高清| 激情成人午夜视频| 337p亚洲精品色噜噜| 一区二区久久久| 91亚洲精品久久久蜜桃| 久久久噜噜噜久噜久久综合| 美女性感视频久久| 91精品国产综合久久精品图片| 一区二区三区不卡视频| 99精品视频在线播放观看| 久久久亚洲高清| 韩国女主播一区二区三区| 91麻豆精品国产91久久久资源速度| 亚洲免费在线看| 91麻豆福利精品推荐| 国产精品网站在线观看| 国产麻豆精品视频| 久久久亚洲午夜电影| 精品一区二区三区久久| 日韩欧美黄色影院| 蜜桃av一区二区三区电影| 91麻豆精品国产91久久久| 亚洲成精国产精品女| 欧美性xxxxxxxx| 亚洲二区视频在线| 精品视频在线视频| 亚洲国产你懂的| 在线91免费看| 日韩不卡一二三区| 8x8x8国产精品| 六月丁香综合在线视频| 日韩一级二级三级| 久草中文综合在线| 久久女同互慰一区二区三区| 国产一区二区三区四| 国产亚洲自拍一区| 高清国产一区二区| 国产精品乱码妇女bbbb| av影院午夜一区| 依依成人综合视频| 欧美日韩一区二区欧美激情| 亚洲bt欧美bt精品| 欧美成人一区二区三区片免费| 精品一区二区三区香蕉蜜桃 | 国产日韩精品久久久| 99riav一区二区三区| 夜夜嗨av一区二区三区网页| 欧美日韩一区成人| 色偷偷久久人人79超碰人人澡| 亚洲精品视频免费看| 337p亚洲精品色噜噜狠狠| 狠狠久久亚洲欧美| 国产精品久久久久久久久久免费看| 96av麻豆蜜桃一区二区| 亚洲成av人片一区二区梦乃| 日韩精品综合一本久道在线视频| 国产乱码字幕精品高清av | 综合av第一页| 欧美美女直播网站| 国产一区二区三区久久久| 国产精品国产三级国产aⅴ入口 | 亚洲国产精品久久艾草纯爱| 精品国产不卡一区二区三区| 99视频超级精品|