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

Visual studio 每次我构建一个虚幻引擎项目时,vs都会这样警告:无法获取MBCS字符串,visual-studio,visual-c++,unreal-engine4,mbcs,Visual Studio,Visual C++,Unreal Engine4,Mbcs,编译没有问题,但此警告会一直显示在输出窗口上。 这只是一件与我正在制作的游戏无关的小事吗?或者以后会出问题吗? 我在谷歌上搜索了这个警告,但什么也找不到。 我所做的是将引擎版本降级到4.24,重新安装VS和UE4,安装MSVC v141和v140(verion 2017,2015)。这是来自 UE4内部字符串表示:虚幻引擎4(UE4)中的所有字符串都以UTF-16格式存储在内存中,作为fstring或TCHAR数组。大多数代码假定2个字节是一个代码点,因此只支持基本多语言平面(BMP),因此将U

编译没有问题,但此警告会一直显示在输出窗口上。 这只是一件与我正在制作的游戏无关的小事吗?或者以后会出问题吗? 我在谷歌上搜索了这个警告,但什么也找不到。 我所做的是将引擎版本降级到4.24,重新安装VS和UE4,安装MSVC v141和v140(verion 2017,2015)。

这是来自

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

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

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 Studio\2019\Community\VC\Tools\MSVC\14.26.28801\bin\HostX64\x64\1042\clui.dll)
2>    UE4Editor-MyProject-0002.dll (0:00.68 at +0:01)
2>       Creating library C:\Users\grand\GameDev\MyProject\Intermediate\Build\Win64\UE4Editor\Development\MyProject\UE4Editor-MyProject-0002.suppressed.lib and object C:\Users\grand\GameDev\MyProject\Intermediate\Build\Win64\UE4Editor\Development\MyProject\UE4Editor-MyProject-0002.suppressed.exp
2>    UE4Editor-MyProject-0002.lib (0:00.07 at +0:02)
2>       Creating library C:\Users\grand\GameDev\MyProject\Intermediate\Build\Win64\UE4Editor\Development\MyProject\UE4Editor-MyProject-0002.lib and object C:\Users\grand\GameDev\MyProject\Intermediate\Build\Win64\UE4Editor\Development\MyProject\UE4Editor-MyProject-0002.exp
2>    MyProjectEditor.target (0:00.17 at +0:02)
2>    ---------------------- Done ----------------------

再看看这个问题:

哇,这是因为增量构建。我删除了它,警告不再出现。

转到VS Build options并选择更详细的输出编译以获取更多详细信息。我添加了更多详细信息。详细设置是诊断性的。能否从文件
MyProjectCharacter.cpp
中添加一段引用字符串的代码?您的警告似乎链接到使用默认语言进行的字符串转换。您的Windows主机语言是什么?如果在输出窗口中向上滚动,它将显示错误所在。很可能您已经创建了一个字符串文字,如
“str”
,需要包装为:
TEXT(“str”)
。我的语言是韩语。很高兴听到您解决了问题,但这并不能解释为什么会出现此编译错误。
string utf8String = Encoding.UTF8.GetString(Encoding.ASCII.GetBytes(text));