c++ TCHAR转string导致中文缺失或乱码问题及解决
这篇文章主要介绍了c++ TCHAR转string导致中文缺失或乱码问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
c++ TCHAR转string导致中文缺失或乱码
1.确定编码方式
首先,确定TCHAR字符串的编码方式。
TCHAR可以表示宽字符,在Unicode编码环境中,TCHAR被定义为wchar_t类型;在ANSI编码环境下,TCHAR被定义为char类型
2.使用适当的函数进行转换
如果TCHAR字符集是ANSI(窄字符)编码
可以使用wcstombs或者使用CString的简化方法GetBuffer将TCHAR转换成char数组,并将该数组存储在string中:
1
2
3
4
5
6
std::string ConvertTCHARToString(const TCHAR* tcharString)
{
char charString[256];
wcstombs(charString, tcharString, sizeof(charString));
return std::string(charString);
}
如果TCHAR字符集是Unicode(宽字符)编码
可以使用WideCharToMultiByte函数将宽字符转换成窄字符
1
2
3
4
5
6
7
std::string ConvertTCHARToString(const TCHAR* tcharString)
{
int bufferSize = WideCharToMultiByte(CP_UTF8, 0, tcharString, -1, nullptr, 0, nullptr, nullptr);
std::string result(bufferSize, ' ');
WideCharToMultiByte(CP_UTF8, 0, tcharString, -1, &result[0], bufferSize, nullptr, nullptr);
return result;
}
如果上述转换方式出现乱码,可能是TCHAR字符串的保存方式非UTF-8,可以修改CP_UTF8,用对应的代码页值进行转换,
例如,使用CP_ACP可以表示使用当前系统的默认代码页:
1
2
3
4
5
6
7
std::string ConvertTCHARToString(const TCHAR* tcharString)
{
int bufferSize = WideCharToMultiByte(CP_ACP, 0, tcharString, -1, nullptr, 0, nullptr, nullptr);
std::string result(bufferSize, ' ');
WideCharToMultiByte(CP_ACP, 0, tcharString, -1, &result[0], bufferSize, nullptr, nullptr);
return result;
}
UE4 C++ FString乱码显示问号
如果以"xxx"这种形式并且xxx为中文时,直接赋值给FString的变量会丢失数据导致系统无法识别,因此需要做特殊处理。
第一种解决
引号前加L表示将字符串转为unicode的字符串,也就是每个字符占用两个字节。
第二种解决
UTF8_TO_TCHAR,也就是将字符串以UTF8格式保存转为TCHAR,TCHAR再隐式转换为FString。
1
FString str = UTF8_TO_TCHAR("小红");
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
C++中CString string char* char 之间的字符转换(多种方法)C++ string 字符串查找匹配实例代码c++之解决char转string时出现的乱码问题c++如何将一个char转化为stringC++字符串拼接效率对比(+=、append、stringstream、sprintf)原文链接:https://blog.csdn.net/ranxuranxu123/article/details/131890540
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 reterry123@163.com 进行投诉反馈,一经查实,立即处理!
相关知识
风花雪月
工作碰上的技术问题及处理经验
解决Error:invalid character in identifier
SKYNE/python
基于Java+SpringBoot+Vue+Redis+RabbitMq的鲜花商城
数据结构课程设计C/C++版
关于美丽的汤和熊猫的UTF
JAVA编程艺术
解决SQL错误(208):对象名‘string
ClassNotFoundException解决方案总结
网址: c++ TCHAR转string导致中文缺失或乱码问题及解决 https://www.huajiangbk.com/newsview104976.html
上一篇: 马铃薯的茎分为地上和地下两部分。 |
下一篇: 在同温同压下,下列各组热化学方程 |
推荐分享

- 1君子兰什么品种最名贵 十大名 4012
- 2世界上最名贵的10种兰花图片 3364
- 3花圈挽联怎么写? 3286
- 4迷信说家里不能放假花 家里摆 1878
- 5香山红叶什么时候红 1493
- 6花的意思,花的解释,花的拼音 1210
- 7教师节送什么花最合适 1167
- 8勿忘我花图片 1103
- 9橄榄枝的象征意义 1093
- 10洛阳的市花 1039