Недавно я начал использовать Visual Studio 2019 для своего проекта C++11. VS2019 преобразовал проект и скомпилировал его в исполняемый файл. Но я не могу открыть файл ресурсов (.rc) в средстве просмотра ресурсов. Это дает мне это предупреждение:
A resource in this file uses an unknown language: Neutral (Default) (unknown sub-lang: 0x8). Unable to open this file.
Я попытался обрезать файл ресурсов до необходимого, но это не сработало.
Странно то, что это также происходит с Scribble, примером проекта Microsoft. Я скачал его с https://docs.microsoft.com/en-us/cpp/mfc/walkthrough-updating-the-mfc-scribble-application-part-1?view=vs-2019 по ссылке [образец Scribble 1.0 MFC] в заголовке Prerequisites.
Когда решение открывается в VS2019, оно конвертируется, компилируется, но я не могу открыть прилагаемый файл ресурсов, чтобы посмотреть диалоги.
Любая помощь приветствуется!
С наилучшими пожеланиями, Кеун





Размещение моего решения для тех, кто сталкивается с подобными проблемами.
Я обнаружил, что неисправные файлы rc имеют кодировку ANSI. Преобразование их в UTF-8 помогло. Вы можете легко сделать это с помощью Notepad ++ через пункт меню [Кодировка], выберите [Преобразовать в UTF-8].
Чего я не понимаю, так это почему VS не исправляет это сам при преобразовании проекта.
@msof На самом деле я не конвертировал его в UTF-8, я конвертировал его в UNICODE (в блокноте - я предполагаю, что это UTF-16) - и это помогло.
Это решение помогло мне: https://developercommunity.visualstudio.com/comments/96766/view.html
Если у вас есть несколько языковых настроек в Windows, удалите все, кроме одного. Пришлось оставить английский (США) вариант. Затем ресурс снова открывается без проблем. Надеюсь, это поможет кому-то (или мне в будущем, так как я уже второй раз трачу час на поиск решения).
Проблема связана не с настройкой языка, а с некорректным сохранением файла RC. Мой файл был в формате ANSI. Как только я открыл файл с помощью Блокнота Windows и сохранил его как Unicode, я смог снова открыть и отредактировать ресурсный проект в студии. (0xFF 0xFE отсутствовал)
Что мне помогло, так это заменить это:
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
(который указывает язык английский, американский с ANSI Latin 1; западноевропейская кодировка (Windows))
Этим :
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
#pragma code_page(65001)
(который указывает нейтральный язык с кодировкой UTF-8)
После внесения этого изменения (убедившись, что файл .rc имеет кодировку UTF-8), Visual Studio больше не жаловалась.
См. https://docs.microsoft.com/en-us/windows/win32/intl/идентификаторы кодовой страницы и https://docs.microsoft.com/en-us/windows/win32/api/winnt/nf-winnt-makelangid#remarks
Я нашел решение, которое сработало для меня.
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEUSD)
LANGUAGE LANG_NEUTRAL, SUBLANG_SYS_DEFAULT
#pragma code_page(1252)
...
Прокомментируйте весь блок #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEUSD) и сохраните файл.
Откройте файл в «Просмотре ресурсов». Закрой его. (Возможно, вам нужно изменить и сохранить что-то здесь)
Снова откройте файл *.rc через «Просмотр кода» в Visual Studio. Раскомментируйте ранее закомментированный раздел и сохраните файл.
После этих шагов проблема была решена. Я не знаю, какой из шагов решил проблему, но, в конце концов, это был мой способ решить проблему.
Мое решение было вдохновлено следующим решением: https://www.codeproject.com/Questions/40860/Resource-file-opening-problem
Изменение языка на самом деле не имело значения в моем случае, я просто преобразовал его в UNICODE (в Блокноте Microsoft — я предполагаю, что это UTF-16) — и это помогло.
Обратите внимание, что здесь есть ответ относительно UTF-8, который у меня не сработал.
Хотя я нашел это решение и на другом форуме, мне оно не помогло.