[英]Why can't i use the € symbol with printf?
像这样以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 显示器上工作,但旧的 Windows 控制台仍在很多地方使用,这需要一些额外的帮助。 确保它在 UTF-8 output 模式下工作(命令行上的chcp 65001
或使用SetConsoleOutputCP
的等效代码)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.