【问题标题】:Special characters C/C++特殊字符 C/C++
【发布时间】:2013-11-29 10:58:59
【问题描述】:

当我使用 NetBeans 编译下面的代码时,程序的输出是终端中的一些奇怪字符(teste á é õ)。不幸的是,我找不到解决方案。

有人经历过吗?知道解决方案吗?

#include <stdio.h> 
#include <locale.h> 

int main(int argc, char** argv) { 
setlocale(LC_ALL,""); 
printf("teste á é õ"); 
return (0); 
} 

我的编译器是 MinGW,我的母语是巴西葡萄牙语。

输出:

【问题讨论】:

  • 郑重声明,“é”是一个 UTF-8“é”,被误解为 ISO-8859-1。例如看这篇文章:Why does “é” become “é”?
  • 所以基本上,您的程序输出 UTF-8 数据,但您的终端设置为使用编码 iso8859-1
  • 在上面的 Dev-C++ 代码中完美运行。我该如何解决?我必须配置 Windows 终端还是愿意在代码中设置输出终端?
  • 此输出是否显示在 NetBeans 控制台或 Windows 命令行终端中?我认为 NetBeans 只能显示 ASCII 字符。对于 Windows 控制台,请参阅 stackoverflow.com/questions/388490/…
  • 两者。不幸的是,即使使用 CHCP 65001 也能正常工作。我会继续使用 Dev-C++ ;/

标签: c++ c netbeans mingw


【解决方案1】:

它们不是 Ascii 字符。

ASCII 字符 0-31 是各种空格字符,没有标准化的打印方式。这是一个“扩展的 ASCII 表”。无法保证这些确切的符号会打印在您的特定平台上。

它们在 Windows 7 中对我来说工作得很好,用 GCC 和 Embarcadero C++ 测试,都打印这些符号。但在另一个操作系统和/或编译器上,可能会打印不同的符号或根本不打印。

只有 ASCII 字符 32 - 126 保证在所有系统上都是可打印的,并且符号相同。

【讨论】:

  • 我不同意。例如,UTF8 也“保证可打印,在所有系统上使用相同的符号”。对“保证”和“所有”使用相同的定义——有些“系统”(软件?计算机?操作系统?手机?)使用 ASCII。
【解决方案2】:

C++ 是一种英语语言,只能打印英语的原始 ASCII 代码,一些第三方库(例如 Curses)可以让您绕过这个问题并打印一些非 ASCII 代码:http://www.melvilletheatre.com/articles/ncurses-extended-characters/index.html

但在大多数情况下,我不明白您为什么要打印这些字符,因为没有实际用途。

其他解释:你不能这样做,因为原始的 ASCII 码由 127 种类型组成。二进制和东西,对问题的不同答案,所以只知道它们只允许 127 个可能的字母,更多可以在这里找到。 enwikipedia.org/wiki/ASCII 和 williamrobertson.net/documents/ascii.html(这个给​​你C++可以实际打印的内容)

【讨论】:

  • -1 C++ is an English language and can only print the original ASCII code from English 完全错了。
  • 实用目的?我说葡萄牙语,我的母语充满了特殊字符,必须打印出来。 ¬¬
  • Drakon 让我觉得我是个巨魔。
猜你喜欢
  • 2016-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-05
  • 2011-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多