【问题标题】:GCC's UTF-8 output displays incorrectly in Eclipse's build consoleGCC 的 UTF-8 输出在 Eclipse 的构建控制台中显示不正确
【发布时间】:2016-06-21 12:01:10
【问题描述】:

我正在使用 Eclipse Mars.1 Release (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 编码很愚蠢,但是可以通过 Google 搜索到的大多数讨论都是关于编码字符串和标识符的,而这里的情况并非如此。

编辑:我的确切问题是如何在 Eclipse 中解决这个问题,例如通过更改 Eclipse 的构建控制台的编码。不幸的是,到目前为止我还没有找到这样的设置(仅适用于调试控制台)。

【问题讨论】:

    标签: c eclipse gcc utf-8


    【解决方案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。

    【讨论】:

    • 我知道是什么问题,所以我问如何解决它。你重新提出了我的问题,但没有回答它。我写道,我已经在所有地方都使用了 UTF-8,但是要么 gcc 打印出来,要么 Eclipse 将其输出解释为古老的 ASCII(通常但不正确地称为“ANSI”,例如在 Notepad++ 中 - 你是对的)。 Windows 几乎在所有地方都使用 Unicode,cp1250 是为不支持 Unicode 的程序选择的语言环境,你不能在那里使用 UTF-8。
    • 我不认为 gcc 是错误的,无论是输入还是输出。如果您将 CP-1250 设置为默认值,请参阅我关于命令 shell 行为的部分。如果命令 shell 在 CP-1250 中运行,则 gcc 的 UTF-8 输出将按照所述方式损坏。
    • Mike,我已经知道,那个命令 shell 正在运行 cp1250,我很熟悉这种你称之为 mojibake 的垃圾(它经常出现在非 ISO8859-1 语言环境的系统上)。我的问题是如何在 Eclipse 中解决这个问题,例如通过更改 Eclipse 构建控制台的编码。到目前为止我还没有找到这样的设置(仅适用于调试控制台)。
    • 我不认为你可以同时拥有它——eclipse要么是utf-8 sane,要么是cp1250 insane。如果您只是想破解您的系统,以便命令工具是 utf-8 理智的,那么 SO 中已经有很多关于该主题的此类帖子。搜索“windows command unicode”等。也许chcp 65001 会有所帮助。我很久没有运行 Windows 了;)。
    猜你喜欢
    • 1970-01-01
    • 2018-09-14
    • 2015-02-22
    • 1970-01-01
    • 2015-11-26
    • 2010-12-12
    • 2020-01-12
    • 2015-01-05
    • 1970-01-01
    相关资源
    最近更新 更多