1. 程式人生 > >CString型別中文字串截取出現亂碼的問題/實現中文字串擷取無亂碼的方法

CString型別中文字串截取出現亂碼的問題/實現中文字串擷取無亂碼的方法

原貼地址

我的方法與他類似,先將cstring轉成寬位元組後再擷取字串

方法原理:cstring下預設字元字母數字等佔一個位元組,而中文佔兩個位元組,轉換成寬位元組後每個單位元組後面會自動填充一個0x00 ,就能和中文一樣保持雙位元組,擷取時保證取得個數為偶數就可以了

程式碼示例:實現自動換行的功能

            strText = consPos;(cstring型別)
			if (strText.GetLength() > 35)   //字元太長,待解決
			{
				Util::ANSItoUTF8(strText);//將ANSI轉成UTF8
				m_Font.CreatePointFont(100, "宋體", pDC);
				pDC->SelectObject(&m_Font);
				nPosX = m_cxLeft + 150;
				size = pDC->GetTextExtent(strText);
				CString strTextLeft = strText.Left(56);
				CString strTextRight = strText.Mid(56);
				Util::UTF8toANSI(strTextLeft);//將UTF8轉成ANSI型別
				Util::UTF8toANSI(strTextRight);
				pDC->TextOut(nPosX, nPosY - 5, strTextLeft);
				pDC->TextOut(nPosX, nPosY + 8, strTextRight);
				fontHeader.DeleteObject();
			}
			else
			{
				nPosX = m_cxLeft + 150;
				size = pDC->GetTextExtent(strText);
				pDC->TextOut(nPosX, nPosY, strText);
				fontHeader.DeleteObject();
			}

換行前

換行後