【问题标题】:How to display the character `£` using c?如何使用c显示字符`£`?
【发布时间】:2012-11-08 14:51:30
【问题描述】:

参考ISO 8859-1标准,知道£这个字符的值是0xa3,我想用c来显示,所以我写了这个程序:

#include <stdio.h>

int main()
{
        printf( "\\xa3 is: %c.\n", '\xa3' );
        printf( "£ is: %c.\n", '£' );

        return 0;
}

我将此源代码文件保存为 iso 8859-1 编码。我希望我的程序在printf 遇到每个%c 时显示两次£

但是,它不起作用,为什么?如何修改我的程序以实现我的目标。

我正在使用 linux。

编辑:

它的显示是这样的:

\xa3 is: �.
£ is: �.

【问题讨论】:

  • 您的终端设置为 ISO-8859-1 了吗?
  • '但是,它不起作用' - 会发生什么?怎么不行?
  • @deanWombourne,问题已更新。

标签: c encoding iso-8859-1


【解决方案1】:

看起来您的终端运行的是 UTF-8 而不是 8859-1。试试这个:

#include <stdio.h>

int main(void)
{
    printf("\\xC2\\xA3 is: %s.\n", "\xC2\xA3");
    printf("£ is: %s.\n", "£");
    return 0;
}

在我的 Mac(终端以 UTF-8 运行)上,输出为:

\xC2\xA3 is: £.
£ is: £.

【讨论】:

  • 那么,如何更改我的终端运行在8859-1?
  • 你用的是哪个Linux下的终端模拟器?您可能可以在某处的菜单上找到一个属性选项,其中一个属性将是代码集(与使用的字体相关但不同)。
  • 我使用的是 Terminal 0.4.8,Xfce Terminal Emulator,我找不到任何与编码相关的菜单项...
  • Xfce4 terminal 和“首选项”选项卡的手册来看,选择代码集不是一个选项。如果需要使用不同的代码集,则需要使用不同的终端仿真器。
  • 一个表现良好的程序不会试图将一个过时的 8 位字符集强加给它的用户。它尊重用户的选择,能够以 8859-1、UTF-8 或任何其他编码运行。
【解决方案2】:

您需要确保输出终端与您(随机)为此字符选择的encoding 匹配。如果您使用的是ISO 8859-1,但您的终端正在等待,例如UTF-8,你可能会得到你所看到的那样的结果。

【讨论】:

  • C 语言的“运行时字符集”是否与此问题相关?
  • 是的,有一个包含字符集的运行时环境。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-07
  • 1970-01-01
  • 2010-12-20
  • 1970-01-01
  • 1970-01-01
  • 2021-12-15
相关资源
最近更新 更多