Каждый раз, когда я создаю проект ненастоящего движка, vs продолжает предупреждать: не удается получить строку MBCS - PullRequest
3 голосов
/ 19 июня 2020
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 ----------------------

Проблем с компиляцией нет, но это предупреждение продолжает отображаться в окне вывода. Это банальная вещь, не имеющая ничего общего с игрой, которую я делаю? или могут возникнуть проблемы позже? Я погуглил это предупреждение, но ничего не нашел. Чтобы решить эту проблему, я понизил версию движка до 4.24, переустановил VS и UE4, установил MSV C v141, v140 (версия 2017, 2015).

Ответы [ 2 ]

2 голосов
/ 20 июня 2020

Это образец из Внутреннее представление строки UE4

Внутреннее представление строки UE4: Все строки в Unreal Engine 4 (UE4) хранятся в памяти в формате UTF-16 как FStrings или массивы TCHAR. Большая часть кода предполагает, что 2 байта - это одна кодовая точка, поэтому поддерживается только Basi c Multilingual Plane (BMP), поэтому внутренняя кодировка Unreal более правильно описывается как UCS-2. Строки хранятся в порядке байтов, соответствующем текущей платформе. При сериализации пакетов на диск и с диска или во время работы в сети строки со всеми символами TCHAR меньше 0xff сохраняются как последовательность 8-битных байтов, а в противном случае - как 2-байтовые строки UTF-16. Код сериализации может обрабатывать любое преобразование порядка байтов по мере необходимости. Когда Unreal загружает внешний текстовый файл (например, читает файл .INT во время выполнения), это почти всегда выполняется с помощью функции appLoadFileToString () из UnMis c. cpp. Основная работа происходит в функции appBufferToString (). Эта функция распознает метку порядка байтов (BOM) Unicode в файле UTF-16 и, если она присутствует, загружает файл как UTF-16 в любом порядке байтов. Что происходит, когда спецификации нет, зависит от платформы. На Windows он попытается преобразовать текст в UTF-16 с использованием кодировки Windows MBCS по умолчанию (например, Windows-1252 for US English and Western Europe, CP949 for Korean and CP932 for Japanese) и использует MultiByteToWideChar (CP_ACP, MB_ERR_INVALID_CHARS ...). Это было добавлено около сборки QA в июле 2009 года. Если это преобразование не удается на платформах, отличных от Windows, он просто считывает каждый байт и дополняет его до 16 битов, чтобы создать массив TCHAR. Обратите внимание, что нет кода для обнаружения или декодирования текстовых файлов в кодировке UTF-8, загруженных с помощью appLoadFileToString ().

Кажется, ваша программа сталкивается с преобразованием предупреждений в кодировку Unicode. Если ваша прочитанная или преобразованная строка соответствует вашим языковым настройкам, вы можете игнорировать это предупреждение. Но попробуйте выполнить преобразование со всеми символами вашего языка, чтобы проверить, все ли хорошо преобразованы. В противном случае вы можете принудительно преобразовать язык, используя:

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

Взгляните также на этот вопрос SO: Как преобразовать строку Unicode в систему TCHAR с помощью проекта Unreal

1 голос
/ 21 июня 2020

Ого, это из-за IncreBuild. Я удалил его, а предупреждение больше не выходит.

...