c++ TCHAR轉string導致中文缺失或亂碼問題及解決
c++ TCHAR轉string導致中文缺失或亂碼
1.確定編碼方式
首先,確定TCHAR字符串的編碼方式。
TCHAR可以表示寬字符,在Unicode編碼環(huán)境中,TCHAR被定義為wchar_t類型;在ANSI編碼環(huán)境下,TCHAR被定義為char類型
2.使用適當?shù)暮瘮?shù)進行轉換
如果TCHAR字符集是ANSI(窄字符)編碼
可以使用wcstombs或者使用CString的簡化方法GetBuffer將TCHAR轉換成char數(shù)組,并將該數(shù)組存儲在string中:
std::string ConvertTCHARToString(const TCHAR* tcharString)
{
char charString[256];
wcstombs(charString, tcharString, sizeof(charString));
return std::string(charString);
}如果TCHAR字符集是Unicode(寬字符)編碼
可以使用WideCharToMultiByte函數(shù)將寬字符轉換成窄字符
std::string ConvertTCHARToString(const TCHAR* tcharString)
{
int bufferSize = WideCharToMultiByte(CP_UTF8, 0, tcharString, -1, nullptr, 0, nullptr, nullptr);
std::string result(bufferSize, '\0');
WideCharToMultiByte(CP_UTF8, 0, tcharString, -1, &result[0], bufferSize, nullptr, nullptr);
return result;
}如果上述轉換方式出現(xiàn)亂碼,可能是TCHAR字符串的保存方式非UTF-8,可以修改CP_UTF8,用對應的代碼頁值進行轉換,
例如,使用CP_ACP可以表示使用當前系統(tǒng)的默認代碼頁:
std::string ConvertTCHARToString(const TCHAR* tcharString)
{
int bufferSize = WideCharToMultiByte(CP_ACP, 0, tcharString, -1, nullptr, 0, nullptr, nullptr);
std::string result(bufferSize, '\0');
WideCharToMultiByte(CP_ACP, 0, tcharString, -1, &result[0], bufferSize, nullptr, nullptr);
return result;
}UE4 C++ FString亂碼顯示問號
如果以"xxx"這種形式并且xxx為中文時,直接賦值給FString的變量會丟失數(shù)據(jù)導致系統(tǒng)無法識別,因此需要做特殊處理。
第一種解決
引號前加L表示將字符串轉為unicode的字符串,也就是每個字符占用兩個字節(jié)。
FString str = L"小明";
第二種解決
UTF8_TO_TCHAR,也就是將字符串以UTF8格式保存轉為TCHAR,TCHAR再隱式轉換為FString。
FString str = UTF8_TO_TCHAR("小紅");
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
C/C++中接收return返回來的數(shù)組元素方法示例
return是C++預定義的語句,它提供了種植函數(shù)執(zhí)行的一種放大,最近學習中遇到了相關return的內(nèi)容,覺著有必要總結一下,這篇文章主要給大家介紹了關于C/C++中如何接收return返回來的數(shù)組元素的相關資料,需要的朋友可以參考下。2017-12-12
淺談C++內(nèi)存分配及變長數(shù)組的動態(tài)分配
下面小編就為大家?guī)硪黄獪\談C++內(nèi)存分配及變長數(shù)組的動態(tài)分配。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-09-09

