每次我构建虚幻引擎项目时,vs 都会发出这样的警告:无法获取 MBCS 字符串


2>    --------------------Project: Default-------------------------------------------
2>    MyProjectCharacter.cpp (0:01.59 at +0:00)
2>    EXEC : warning : unable to get MBCS string (input text '??: ?? ??:%s%s
2>    ', library C:Program Files (x86)Microsoft Visual Studio2019CommunityVCToolsMSVC14.26.28801binHostX64x641042clui.dll)
2>    UE4Editor-MyProject-0002.dll (0:00.68 at +0:01)
2>       Creating library C:UsersgrandGameDevMyProjectIntermediateBuildWin64UE4EditorDevelopmentMyProjectUE4Editor-MyProject-0002.suppressed.lib and object C:UsersgrandGameDevMyProjectIntermediateBuildWin64UE4EditorDevelopmentMyProjectUE4Editor-MyProject-0002.suppressed.exp
2>    UE4Editor-MyProject-0002.lib (0:00.07 at +0:02)
2>       Creating library C:UsersgrandGameDevMyProjectIntermediateBuildWin64UE4EditorDevelopmentMyProjectUE4Editor-MyProject-0002.lib and object C:UsersgrandGameDevMyProjectIntermediateBuildWin64UE4EditorDevelopmentMyProjectUE4Editor-MyProject-0002.exp
2>    MyProjectEditor.target (0:00.17 at +0:02)
2>    ---------------------- Done ----------------------

编译没有问题,但此警告一直显示在输出窗口中。 这只是一件与我正在制作的游戏无关的小事吗?还是以后会制造一些问题? 我用谷歌搜索了这个警告,但我找不到任何东西。 我所做的解决方法是将引擎版本降级到4.24,重新安装VS和UE4,安装MSVC v141,v140(版本2017,2015(。

这是UE4内部字符串表示的示例

UE4内部字符串表示:虚幻引擎4(UE4(中的所有字符串都以UTF-16格式作为FStrings或TCHAR数组存储在内存中。大多数代码假设2字节是一个代码点,因此仅支持基本多语言平面(BMP(,因此虚幻的内部编码更准确地描述为UCS-2。字符串以适合当前平台的字节序存储。 在将包序列化到磁盘/从磁盘序列化到包时或在网络期间,所有 TCHAR 字符都小于 0xff 的字符串存储为一系列 8 位字节,否则存储为 2 字节 UTF-16 字符串。序列化代码可以根据需要处理任何字节序转换。 当虚幻引擎加载外部文本文件(例如在运行时读取.INT文件(时,几乎总是使用UnMisc.cpp中的appLoadFileToString((函数来完成。主要工作发生在 appBufferToString(( 函数中。 此函数识别 UTF-16 文件中的 Unicode 字节顺序标记 (BOM(,如果存在,则将文件作为字节序的任一字节序加载为 UTF-16。 不存在 BOM 时发生的情况取决于平台。 在Windows上,它将尝试使用默认的Windows MBCS编码(例如Windows-1252 for US English and Western Europe, CP949 for Korean and CP932 for Japanese(将文本转换为UTF-16,并使用MultiByteToWideChar(CP_ACP,MB_ERR_INVALID_CHARS...(。这是在 2009 年 7 月的 QA 版本周围添加的。 如果此转换在Windows以外的平台上失败,它将仅读取每个字节并将其填充到16位以创建TCHAR数组。 请注意,没有代码可以检测或解码加载了 appLoadFileToString(( 的 UTF-8 编码文本文件。

似乎您的程序面临语言 unicode 警告转换。 如果读取或转换的字符串与语言设置正确,则可以忽略此警告。但是尝试对所有语言字符进行一些转换,以检查所有语言字符是否转换良好。 否则,您可以使用以下方法强制语言转换:

string utf8String = Encoding.UTF8.GetString(Encoding.ASCII.GetBytes(text));

再看看这个SO问题:如何使用虚幻项目将Unicode字符串转换为TCHAR系统

哇,这是因为IncreBuild。我删除了它,警告不再出现。

相关内容

最新更新