首页 > 解决方案 > 在 C 中使用 printf() 打印出这个字符符号 ÿ (ASCII 152)

问题描述

我无法打印出这个特殊符号 ÿ (ASCII 152)。查看调试器,我可以看到变量正在保存特殊符号。目前它只是打印一个空格。

我的简化代码看起来像这样

结构:

typedef struct BufferDescriptor {
    char* cb_head;
}* pBuffer;

//Current object
pBuffer ptr_Buffer;

将符号添加到 cb_head 的行:

//Calling addsymbol, the symbol used is EOF
addsymbol(ptr_Buffer, EOF);

Buffer* addsymbol(Buffer p, char symbol){
    p->cb_head[add] = symbol;
}

我的 printf,我已经检查了变量缓冲区的值,它包含 ÿ 符号。但它只是打印出一个空格......是否有一些可能与机器相关的东西或我缺少的关于 ASCII 的东西。

printf("%c",buffer);

标签: cprintfascii

解决方案


如果相同的数字在不同的程序中显示不同,则可能是字符编码问题。将数字 152 解释为字符的方式有很多种。每个应用程序都可以使用不同的编码。听起来您的编辑器以及您要打印到的任何地方都使用不同的编码。

没有 ASCII 152。ASCII 是 7 位,只有 127。

ASCII有很多很多的扩展编码,它们添加了第 8 位来覆盖 128-255。它们对前 127 个字符共享相同的编码,之后它们会发散。CP 437 和CP 850ÿ152。Latin -1Windows-1252 ÿ为 255。大多数现代东西使用UTF-8,表示ÿ为两个字节,c3 bf.

152 在 Latin-1 中什么都不是,在 UTF-8 中什么都不是。

可能发生的情况是有些东西使用 UTF-8(152 无效),有些使用 CP 850(152 是ÿ)。检查 IDE 的字符编码以及用于显示的任何内容。


推荐阅读