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

 更新时间:2023年08月01日 10:48:24   作者:勺子叔  
这篇文章主要介绍了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中:

std::string ConvertTCHARToString(const TCHAR* tcharString)
{
    char charString[256];
    wcstombs(charString, tcharString, sizeof(charString));
    return std::string(charString);
}

如果TCHAR字符集是Unicode(宽字符)编码

可以使用WideCharToMultiByte函数将宽字符转换成窄字符

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;
}

如果上述转换方式出现乱码,可能是TCHAR字符串的保存方式非UTF-8,可以修改CP_UTF8,用对应的代码页值进行转换,

例如,使用CP_ACP可以表示使用当前系统的默认代码页:

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的变量会丢失数据导致系统无法识别,因此需要做特殊处理。

第一种解决

引号前加L表示将字符串转为unicode的字符串,也就是每个字符占用两个字节。

FString str = L"小明";

第二种解决

UTF8_TO_TCHAR,也就是将字符串以UTF8格式保存转为TCHAR,TCHAR再隐式转换为FString。

FString str = UTF8_TO_TCHAR("小红");

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • C语言中强制类型转换的常见方法

    C语言中强制类型转换的常见方法

    强制类型转换是一种将一个数据类型转换为另一个数据类型的方法,这篇文章主要为大家整理了C语言中强制类型转换的方法,需要的可以参考一下
    2023-05-05
  • C语言main函数的三种形式实例详解

    C语言main函数的三种形式实例详解

    这篇文章主要介绍了 C语言main函数的三种形式实例详解的相关资料,需要的朋友可以参考下
    2017-06-06
  • 利用C语言的Cairo图形库绘制太极图实例教程

    利用C语言的Cairo图形库绘制太极图实例教程

    这几天都在研究Cairo图形库,这是一个开源跨平台的图形库,相对于OpenGL来说更容易上手使用。这篇文章是利用C语言的Cairo图形库绘制了一个太极图,对大家学习Cairo图形库具有一定的参考借鉴价值,下面来一起看看吧。
    2016-12-12
  • Qt编写秒表功能

    Qt编写秒表功能

    这篇文章主要为大家详细介绍了Qt编写秒表功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • C语言实现考勤管理系统

    C语言实现考勤管理系统

    这篇文章主要为大家详细介绍了C语言实现考勤管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • C++ std::bind用法详解

    C++ std::bind用法详解

    这篇文章主要介绍了C++ std::bind用法详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • 利用C++实现简易的狼人杀游戏

    利用C++实现简易的狼人杀游戏

    狼人杀游戏是一款非常有趣的角色扮演游戏,它需要玩家之间互相猜测身份并进行投票,通过推理来找出真正的狼人。本文将用C++实现这一游戏,感兴趣的可以了解一下
    2023-04-04
  • FFmpeg中avfilter模块的介绍与使用

    FFmpeg中avfilter模块的介绍与使用

    FFmpeg中的libavfilter模块(或库)用于filter(过滤器), filter可以有多个输入和多个输出,下面就跟随小编一起简单学习一下它的巨日使用吧
    2023-08-08
  • C++中std::count函数介绍和使用场景

    C++中std::count函数介绍和使用场景

    std::count函数是一个非常实用的算法,它可以帮助我们快速统计给定值在指定范围内的出现次数,本文主要介绍了C++中std::count函数介绍和使用场景,感兴趣的可以了解一下
    2024-02-02
  • C语言实现电话簿管理系统课程设计

    C语言实现电话簿管理系统课程设计

    这篇文章主要为大家详细介绍了C语言实现电话簿管理系统课程设计,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11

最新评论