首页 分享 c++ TCHAR转string导致中文缺失或乱码问题及解决

c++ TCHAR转string导致中文缺失或乱码问题及解决

来源:花匠小妙招 时间:2024-09-10 14:13

这篇文章主要介绍了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

所属分类:花卉
上一篇: 马铃薯的茎分为地上和地下两部分。
下一篇: 在同温同压下,下列各组热化学方程

推荐分享