繁体   English   中英

为什么我不能在 printf 中使用 € 符号?

[英]Why can't i use the € symbol with printf?

我如何使用 c 将此符号 (€) 放在终端上。我试过:

printf("%c",0128);

0128 是 ascii 表上的代码,但编译器给出了错误:

八进制常量中的无效数字 8

在此处输入图像描述

像这样以0开头的数字文字被解释为八进制(基数 8),因此仅由0 - 7中的数字组成。 所以08是非法的, 0128也是非法的。

欧元符号Windows-1252 (CP-1252)编码为十进制128

您张贴的图像是Alt 代码,它是通过在数字键盘上键入Alt 0 1 2 8来输入 Windows 上的字符的一种方式。

如果您使用的是 CP-1252,则可以通过删除前导零(以生成十进制文字128 )来解决您的问题。

你在这里混淆了一些事情。

首先,您发布片段的表格不显示字符代码。 它显然记录了如何在 Windows 上输入字符(我在此处对另一个问题的答复中介绍了这一点: C# 将 ALT+<XXX> 代码映射到字符)。 这里的前导零表示您输入的字符代码指的是所谓的 ANSI 代码页,而不是 OEM 代码页。

请注意,您通过键入 Alt+0128 获得的字符可能因计算机而异。

另请注意,128 不是 ASCII 码。 ASCII仅涵盖字符代码 0 到 127。

其次,integer 文字中的前导零在 C 及其后继者中具有不同的含义。 这意味着该数字是用八进制数字系统编写的。 在 70 年代起草 C 时,八进制表示法比十六进制更受欢迎。 根据定义,8 不是有效的八进制数字,因此0128是词法错误。

这两个含义是无关的。 因此,如果要打印由组合键 Alt+0128 输入的字符,则需要以其他方式执行。

另请注意,在许多情况下,您不能将表示为一个char单位。 如果您的控制台配置为 UTF-8,则它的 Unicode 代码点 0x20AC 由三个字节表示:0xe2、0x82、0xac(或 226、130、172)。

打印这样的东西的最好方法是......不要使用 hex/oct/whatever constants使用 string

使用文本编辑器将源代码保存为 UTF-8 并直接执行此操作:

puts( "Dinner is €12.50." );

假设:

  • 编译器采用 UTF-8 源输入(现代编译器需要,旧编译器可能需要标志)
  • 标准库句柄 UTF-8(现在好多了)
  • 一个可以显示UTF-8的终端

最后一个是症结所在。 大多数现代系统都在 UTF-8 显示器上工作,但旧的 Windows 控制台仍在很多地方使用,这需要一些额外的帮助。 确保它在 UTF-8 output 模式下工作(命令行上的chcp 65001或使用SetConsoleOutputCP的等效代码)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM