控制台显示来自 gcc 的引号字符 wongly

Mar*_*urg 2 debian gcc unicode console

升级到 debian wheezy 后,我的文本控制台在应该有引号的地方显示问号

在XI下正确看待事物

window.cpp:1056:21: error: base operand of ‘->’ is not a pointer
Run Code Online (Sandbox Code Playgroud)

但控制台显示

window.cpp:1056:21: error: base operand of ?->? is not a pointer
Run Code Online (Sandbox Code Playgroud)

如果我从该文件中删除除引号之外的所有内容并将 xy 放在它周围(以便更容易地发现它),那么 emacs hexl-mode 会告诉我这是这个字符

 00000000: 78e2 8098 790a                           x...y.
Run Code Online (Sandbox Code Playgroud)

我理解 78 (x)、79(y) 和 0a (LF),但我很难相信像引号这样简单的东西需要三个 unicode 字节。

我也试过

dpkg-reconfigure console-setup
Run Code Online (Sandbox Code Playgroud)

并设法产生更多不可读的字符,但未能正确看到引号。我可以输入单引号没问题,联机帮助页和一切看起来都不错,所以我不知道应该归咎于 gcc 还是控制台。

Gil*_*il' 5

花哨的引号字符 ‘’是 Unicode 字符 U+2018 和 U+2019(每个字符一个 Unicode 字符)。它们的 UTF-8 编码是一个 3 字节的序列,分别是 e2 80 98 和 e2 80 99。我不知道为什么你很难相信这一点。

显然,您的环境指示 UTF-8 语言环境。运行locale显示相关环境变量。您的控制台似乎设置为显示 UTF-8,但字体不包含字符因此您看到的是?

如果您切换到非 UTF-8 语言环境,gcc 将使用 ASCII 引号 ( `->')。