我正在使用Eclipse Mars.1发行版(4.5.1),Win7 SP1和gcc 5.2.1(适用于Cortex架构,来自https://launchpad.net/gcc-arm-embedded)。当我尝试编译以UTF-8(带有BOM)编码的C代码时,gcc输出以ANSI格式显示,当然不正确。我的工作区和项目的默认编码设置为UTF-8。
添加gcc开关-finput-charset=UTF-8
并不会改变任何内容。
对于示例代码(在C中):
#error some code here /* diacritics in comment żółćąę */
我在Eclipse的构建控制台中得到以下结果:
arm-none-eabi-gcc -c -mcpu=cortex-m3 -mthumb -Wall -Wstrict-prototypes -Wextra -Wchar-subscripts -Werror=implicit -finput-charset=UTF-8 -g -ggdb3 -fverbose-asm -Wa,-ahlms=./out/logbook_entry_ext2.lst -pipe -MD -MP -MF ./out/logbook_entry_ext2.d -Os -ffunction-sections -fdata-sections -I . -Itests/aceunit/ -Itests/ -Itests/inc/ logbook_entry_ext2.c -o out/logbook_entry_ext2.o
logbook_entry_ext2.c:32:2: error: #error some code here
#error some code here /* diacritics in comment żółćąę */
以ANSI编码的文件(在我的语言环境中为cp1250 - 中欧语言)正确显示。
这同样适用于Eclipse的解析器(例如,'问题'窗口 - 编码在那里以类似的方式被破坏。)
我确信有人已经克服了这个问题,因为在21世纪使用ANSI编码很愚蠢,但是大多数人都可以讨论编码字符串和标识符的问题,但这并非如此。
编辑:我的确切问题是如何在Eclipse中解决这个问题,例如:通过改变Eclipse的构建控制台的编码。不幸的是,到目前为止我还没有找到这样的设置(仅适用于调试控制台)。
答案 0 :(得分:1)
ANSI不是编码,而是一个组织。也许你的意思是ASCII?无论哪种方式,这可能不是问题。
您说您的系统区域设置设置为Windows 1250(代码页1250)。这就是问题所在:你试图以不兼容的编码方式使用UTF-8内容。
你在那里展示的mojibake表明这是真正的问题。如果您使用“żółćąę”并将该字节序列从CP-1250转换为UTF-8编码,您最终会得到“ĹĽĂłĹ,ćÄ...Ä™”。 iconv实用程序可用于确认:$ iconv -t UTF-8 -f CP1250 <<<'żółćąę'
żółćąę
我想当Eclipse启动command shell来运行工具(如gcc)时,它会使用您的本地语言环境(CP-1250)。所以喂它UTF-8的内容就会腐败。
简单的答案(imo)是在任何地方使用UTF-8而不是任何Windows特定的编码(如CP-1250)。 Windows将其定义为CP-65001。