Ошибка RC2135 в проекте C++ из-за кодировки файла RC UTF-8
После перехода с Visual Studio 2010 на 2012 я получил 10 ошибок RC2135, которые выглядели довольно странно в одном из моих проектов C++.
Error 1 error RC2135: file not found: 0x06 NamedPipesNative.rc 19 1 NamedPipesNative
Error 2 error RC2135: file not found: 1 NamedPipesNative.rc 28 1 NamedPipesNative
Error 3 error RC2135: file not found: 5 NamedPipesNative.rc 29 1 NamedPipesNative
Error 4 error RC2135: file not found: 5 NamedPipesNative.rc 30 1 NamedPipesNative
Error 5 error RC2135: file not found: 0x17L NamedPipesNative.rc 31 1 NamedPipesNative
Error 6 error RC2135: file not found: FILEOS NamedPipesNative.rc 37 1 NamedPipesNative
Error 7 error RC2135: file not found: 0x2L NamedPipesNative.rc 38 1 NamedPipesNative
Error 8 error RC2164: unexpected value in RCDATA NamedPipesNative.rc 41 1 NamedPipesNative
Error 9 error RC2135: file not found: BLOCK NamedPipesNative.rc 43 1 NamedPipesNative
Error 10 error RC2135: file not found: VALUE NamedPipesNative.rc 45 1 NamedPipesNative
К сожалению, я предположил, что это как-то связано с переходом на VS 2012 (он спросил, хочу ли я преобразовать проект C++ или нет), и я потратил много времени, пытаясь выяснить это на основе этого предположения. Но на самом деле это было что-то совершенно другое. В надежде помочь кому-то еще, кто сталкивается с этой проблемой, я отправлю ответ через мгновение.
3 ответа
В рамках перехода на Visual Studio 2012 я также обновил номер версии программы в файле.rc, используя самодельную программу, которая обработала все мои файлы AssemblyInfo.cs и.rc, и изменила кодировку. RC-файл из ANSI в UTF-8. И Microsoft Resource Compiler не может правильно читать файлы UTF-8! http://social.msdn.microsoft.com/Forums/hu-HU/vcgeneral/thread/e212069d-678e-4ac8-957f-7d60d3e1c89f
Поэтому решение заключается в том, чтобы перекодировать файл.rc в формат ANSI или UTF-16.
Если вы пообещаете всегда вручную редактировать файл.rc, вы можете поместить это в начало, и компилятор ресурсов скомпилирует utf-8 как ангел,
#pragma code_page(65001)
Но как только редактор ресурсов VS сможет восстановить файл.rc, он будет испорчен.
Вы также можете использовать командную строку события Pre-build для преобразования вашего исходного файла UTF-8 перед компиляцией.
Примеры шагов:
исключить ваш файл UTF-8 из компиляции.
сделайте копию вашего файла UTF-8, переименуйте его
добавьте запись в командной строке события Pre-build, преобразовав исходный файл UTF-8 в переименованный файл как UNICODE. Этот инструмент может помочь вам.
$ (ProjectDir) \ tools \ uniconv.exe UTF8 $ (ProjectDir) \ DocumentBrowserUTF8.rc UCS2 $ (ProjectDir) \ DocumentBrowser.rc
в ваших сценариях сборки (во многих случаях Visual Studio .vcxproj файл) сделайте так, чтобы он компилировал преобразованный файл вместо исходного файла UTF-8.