【问题标题】:C: Display special characters with printf()C: 使用 printf() 显示特殊字符
【发布时间】:2016-01-07 05:50:10
【问题描述】:

我想知道如何用printf() 显示特殊字符。
我正在做一个从 Text 到 Code128(条形码编码)的字符串转换程序。
对于这种类型的编码,我需要显示 Î、Ç、È、Ì 等字符。

示例:
要转换的字符串:EPE196000100000002260500004N
预期结果:ÌEPEÇ3\ *R 6\ R $ÈNZÎ
printf 结果输入:╠EPEÇ3\ *R 6\ R $ÇNZ╬
printf 结果图片:[]

编辑:我只能在这个程序中使用 C,根本不能使用 C++。到目前为止我发现的所有遮阳篷都是用 C++ 而不是 C 所以我在问如何用 C ^^

【问题讨论】:

标签: c character-encoding


【解决方案1】:

如果您的控制台采用 UTF-8 格式,则可以只为您的符号打印 UTF-8 十六进制表示。查看 C++ 的类似答案Special Characters on Console

下面一行打印出 heart:

printf("%c%c%c\n", '\xE2', '\x99', '\xA5');

但是,由于您打印 '\xCC', '\xC8', '\xCE','\xC7' 并且您有 4 个不同的符号,这意味着控制台编码是某种 ASCII 扩展。可能你有这样的编码http://asciiset.com/。在这种情况下,您需要字符 '\x8c'、'x8d'。不幸的是,该编码中没有这些符号的大写版本。因此,您的控制台需要一些其他编码,例如Latin-1, ISO/IEC 8859-1


对于 Windows 控制台:

UINT oldcp = GetConsoleOutputCP(); // save current console encoding

SetConsoleOutputCP(1252);
// print in cp1252 (Latin 1) encoding: each byte => one symbol
printf("%c%c%c%c\n", '\xCC', '\xC8', '\xCE','\xC7');

SetConsoleOutputCP(CP_UTF8);
// 3 hex bytes in UTF-8 => one 'heart' symbol
printf("%c%c%c\n", '\xE2', '\x99', '\xA5');

SetConsoleOutputCP(oldcp);

控制台字体应支持 Unicode(例如“Lucida Console”)。它可以在控制台属性中手动更改,因为默认字体可能是“光栅字体”。

【讨论】:

  • 非常感谢!!我会以这种方式调查:)
  • 我试过这个来改变控制台编码 #include int main() { SetConsoleOutputCP(CP_UTF8); printf("%c%c%c%c\n", '\u00CE', 'Ç', 'È','Ì');返回0; } 但仍然显示我不想看到的东西... ^^' img110.xooimage.com/views/a/e/9/capture1-4d0699b.png
  • @MarceauC 现在更清楚您使用 Windows 控制台了。我用 Windows 示例更新了答案。
【解决方案2】:

我找到了,

#include <locale.h>
int main()
{
setlocale(LC_ALL,"");
 printf("%c%c%c%c\n", 'Î', 'Ç', ' È','Ì');
}

谢谢大家的遮阳篷,这对我帮助很大!!! :)

【讨论】:

  • 请注意,此代码不可移植,因为此类符号 ('Ç') 可能以单个字节或几个 Unicode 字节的形式存储在源文件中。这取决于您的文本编辑器。如果文本编辑器是非 Unicode,则这些符号的二进制代码取决于编辑器编码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-27
  • 1970-01-01
相关资源
最近更新 更多