由于RC文件采用UTF-8编码,在C++项目中出现了错误RC2135。

9

从Visual Studio 2010切换到2012后,我的一个C++项目出现了10个RC2135错误,这些错误看起来相当奇怪。

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个回答

15

2

如果您承诺始终手动编辑.rc文件,您可以将以下内容放在文件开头,资源编译器会像天使一样编译utf-8:

#pragma code_page(65001)

但是一旦VS资源编辑器重新生成.rc文件,它就会变得一团糟。


1
只有rc文件是UTF-8无BOM格式时才能正常工作。 - 23W

1

您还可以使用Pre-build event command line在编译之前将UTF-8源文件转换为其他编码。

操作步骤如下:

  1. 从编译中排除您的UTF-8文件。

  2. 复制您的UTF-8文件,重命名它。

  3. 在Pre-build事件命令行中添加一个条目,将原始的UTF-8文件转换为以UNICODE命名的文件。 此工具 可能会对您有所帮助。

    $(ProjectDir)\tools\uniconv.exe UTF8 $(ProjectDir)\DocumentBrowserUTF8.rc UCS2 $(ProjectDir)\DocumentBrowser.rc

  4. 在构建脚本中(在许多情况下,即Visual Studio .vcxproj文件中),使其编译转换后的文件而不是原始的UTF-8文件。


uniconv -decode utf-8 -in resource.utf8.rc -encode ucs-2 -out resource.rc - ilyaigpetrov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接