You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Unreal Engine 4中char*转TCHAR/FString的UE4原生实现方法问询

在Unreal Engine 4中将char转换为FString/TCHAR的原生方法

嘿,刚好我之前在UE项目里经常处理这类字符串转换,给你分享几个完全用UE4原生API的方案,不用依赖标准库或者Windows专属的API,跨平台还更适配引擎~

一、直接将char*转换为FString

UE4的FString类提供了直接接收UTF-8编码char*的构造函数,这是最简便的方法,完美适配你的示例场景(包含多字节和宽字符的UTF-8字符串):

const char* bytes = "somemultibytecharacter一些宽字符";
// 直接构造FString,自动处理UTF-8转TCHAR的逻辑
FString ConvertedString(bytes);

这个构造函数底层用的就是UE原生的UTF-8转换逻辑,完全不用操心跨平台的问题。

二、使用FUTF8ToTCHAR类转换为TCHAR*

如果你需要直接得到TCHAR*而不是FString,可以用UE4专门的编码转换类FUTF8ToTCHAR,它就是负责把UTF-8多字节字符串转成UE的TCHAR(宽字符)的:

const char* bytes = "somemultibytecharacter一些宽字符";

// 初始化转换对象,传入要转换的char*
FUTF8ToTCHAR UTF8Converter(bytes);
// 获取转换后的TCHAR*,注意这个指针的生命周期和UTF8Converter绑定
const TCHAR* ConvertedTChar = UTF8Converter.Get();

// 之后要把这个TCHAR*存成FString也很简单
FString ConvertedString(ConvertedTChar);

几个要注意的点

  • 编码要求:上面的方法默认你的char*UTF-8编码的,如果你的字符串是其他编码(比如GBK),直接转换会乱码。这种情况建议先把字符串转成UTF-8再用UE的原生方法处理,UE没有直接支持其他编码转TCHAR的原生工具。
  • 生命周期问题FUTF8ToTCHAR::Get()返回的TCHAR*依附于转换对象,一旦UTF8Converter被销毁,这个指针就失效了。如果需要长期使用转换后的字符串,一定要转成FString来管理内存。
  • 跨平台优势:和std::mbstowcs或者MultiByteToWideChar相比,UE的原生方法是跨平台兼容的,不用针对Windows/ Linux/ macOS写不同的分支代码。

内容的提问来源于stack exchange,提问作者zwcloud

火山引擎 最新活动