CString型別中文字串截取出現亂碼的問題/實現中文字串擷取無亂碼的方法
阿新 • • 發佈:2018-12-14
我的方法與他類似,先將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(); }
換行前
換行後