如何在C语言中打印微秒符号?

5

我正在尝试在C语言中打印微秒符号,但输出结果为空。

printf("Micro second = \230");

I also tried using int i = 230;

printf("Character %c", i);

但是没有成功!有什么建议吗?

1
你使用的操作系统是什么?当你尝试时发生了什么?你得到任何输出吗?输出显示了什么? - Greg Hewgill
我正在使用Mac(Snow Leopard 10.6)进行工作。 - Sana
你在使用Terminal.app时使用了哪种编码? - mmmmmm
这不是为什么你得到“nothing”(那会是UTF-8的问题,如下所述),但在字符串中\nnn解释为八进制数。 十进制230是八进制346是十六进制E6; 八进制230是十进制152是十六进制98。 在代码页437中,根据使用230作为µ来判断,代码点152(十进制)是ÿ。 - zwol
6个回答

16

这完全取决于你所使用的控制台字符编码。如果你正在使用Linux或Mac OS X,那么最有可能的编码是UTF-8。µ的UTF-8编码(Unicode代码点U+00B5)是'C2 B5'(两个字节),因此你可以像这样打印它:

printf("Micro second = \xC2\xB5");  // UTF-8

如果您在Windows平台上使用console,则控制台使用的默认编码是代码页437,那么µ的编码为0xE6,因此您需要执行以下操作:

printf("Micro second = \xE6");  // Windows, assuming CP 437

OSX终端默认为UTF-8,但可以更改。 - mmmmmm
@Mark:是的,没错。如果你能检测出终端使用的编码方式(可能有方法,但我不知道是什么),那么你可以在运行时使用类似libiconv的工具将序列转换为终端的编码方式。 - Adam Rosenfield
CP437使用\xE6表示µ(== 230);\xB2表示▒。 - zwol
@Zack:哎呀,不知道怎么回事,我一定是严重地误读了维基百科 <_<。 - Adam Rosenfield
对于至少Win7 Tahoma Western字体中的微小字符,请尝试使用数字键盘输入alt-0181或打出\xB5。这两种方法都在log4cxx中有效,并能够在Apache的Chainsaw中正确显示。Alt-0181还可以在VS2010中正确显示。在此SO编辑器中键入也有效:µ。 - bvj

3

以下是C语言中标准的打印方式:

printf("%lc", L'\u00b5');

如果您可以假设使用UTF-8编码,那么我建议将"µ"硬编码。

+1,但我认为您存在不匹配的问题。您可以使用%ls作为格式字符串或L'\u00b5' - Jens Gustedt
好像我得到了 µ - ycomp

1

由于您使用的是Mac OS,可以放心地使用UTF-8终端。因此,请打开字符面板(编辑->特殊字符...),在其中找到微秒符号,并将其放入您的字符串中。

int main()
{
    printf("µs\n");
}

只要您的源文件也是UTF-8格式,它就可以正常工作。否则,您需要找到其代码点(这也应在字符面板中指示)。将鼠标悬停在字符上以查找其UTF-8值(请原谅我的法语系统): Mac OS特殊字符面板示例,显示代码点

这意味着您可以使用printf("\xc2\xb5")作为字符本身的独立编码替代。


1
或者只需按选项键和字母m来生成µ。 - Stephen Canon
虽然这样可能有效,但它并不具有可移植性,因为µ不包含在基本源字符集中。使用GCC时,如果您的LANG环境变量设置为某些值,则它可能会选择不同的源字符集;您需要使用-finput-charset=UTF-8选项覆盖此设置。对于其他编译器,谁知道呢。 - Adam Rosenfield
@Stephen Canon 我认为它不适用于所有键盘布局,而且特殊字符面板还提供了其他有趣的信息。 - zneak

0

我也遇到了同样的问题,我根据代码页437找到了解决方案。

"\xB5"

我只是把那段代码放进一个字符串里,然后就成功了。

我的开发环境是Windows下的C++。我试图将一个字符串转换成可以在SFML中显示的形式。


0
  printf("%c", 230);

对我来说可以工作。 我认为这取决于操作系统。 这取决于编码(感谢zneak)。 我在Windows上。


4
这取决于编码。 - zneak

0

在工作项目中使用了 C 和 C++14 的混合,以下是适用于我的方法:

printf("Micro second symbol = \xC2\xB5");

\xB5,和\230在我的输出上产生了▒。我的项目设备显然很挑剔,因为我尝试过其他一些在线IDE和Mac上的Xcode版本,都可以正常工作。

如果你尝试在控制台之外的其他地方打印,比如LCD屏幕,那么你的屏幕就必须被编程(创建和映射到xyz...),以包括该字符。不过根据我的经验,这在你正在创建的内容是什么方面会有很大的差异。


你可以解释一下,C2 B5 是 Unicode 代码点 181 的 UTF-8 编码,表示 MICRO SIGN 符号 µ。此外,你的回答并不比被接受的回答更好:https://dev59.com/oFTTa4cB1Zd3GeqPs4LG#5060616。 - chqrlie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接