有Unreal C++函数可以将字节数组解析为具有特定编码的FString吗?

问题描述 投票:0回答:1

我正在开发一个虚幻引擎 5 项目,需要解析二进制文件。这些文件包含以 Shift-JIS 编码的文本,而不是 UTF-8 编码。我的目标是将字节数组从该二进制文件转换为 FString,但使用 Shift-JIS 编码进行专门解释。

我一直在网上搜索潜在的解决方案,但似乎没有找到任何可以解决此特定问题的内容。理想情况下,我正在虚幻 C++ 中寻找一个可以使用 Shift-JIS 编码解码字节数组并将其转换为 FString 的函数或方法。 Unreal有内置支持这种转换吗?或者如果没有,是否有任何第三方库或自定义解决方案我可以使用其他方式来实现此功能?

如果它有帮助的话,我对函数如何工作非常灵活,只要我最终也有字符串的正确 FString 表示。除了实现转换之外,我没有任何具体要求。

c++ utf-8 character-encoding unreal-engine5 shift-jis
1个回答
0
投票

FString ByteArrayToString(const TArray<uint8>& ByteArray, EStringEncoding Encoding) { FString Result; if (ByteArray.Num() > 0) { switch (Encoding) { case EStringEncoding::UTF8: Result = FString(UTF8_TO_TCHAR(reinterpret_cast<const char*>(ByteArray.GetData()), ByteArray.Num())); break; case EStringEncoding::ASCII: Result = FString(ANSI_TO_TCHAR(reinterpret_cast<const char*>(ByteArray.GetData()), ByteArray.Num())); break; default: checkf(false, TEXT("Unsupported encoding")); break; } } return Result; }

此函数采用 TArray(字节数组)和 EStringEncoding 枚举值作为输入,并返回 FString 对象。

该函数使用了StringConv.h头文件,该头文件提供了不同字符串编码之间转换的函数。

您可以像这样使用此功能:

TArray<uint8> ByteArray =...; // your byte array FString String = ByteArrayToString(ByteArray, EStringEncoding::UTF8);

请注意,此函数假设字节数组包含一个以 null 结尾的字符串。如果您的字节数组不包含以 null 结尾的字符串,您可能需要相应地修改函数。

© www.soinside.com 2019 - 2024. All rights reserved.