在Mac(运行MacOS的塞拉利昂10.12.3与GCC 6.3.0),在终端与区域由LANG=en_US.UTF-8
设置,以下变化都编译:
#include <stdio.h>
#define PRODUCT_STRING "Acme Widget™ 1.2.3"
#define PRODUCT_UTF8 "Acme Widget\u2122 1.2.3"
#define PRODUCT_NAME Acme Widget™ 1.2.3
#define STRINGIFY(x) # x
#define CVT_TO_STRING(x) STRINGIFY(x)
int main(void)
{
puts(CVT_TO_STRING(PRODUCT_NAME));
puts(PRODUCT_STRING);
puts(PRODUCT_UTF8);
return 0;
}
编译:
$ gcc -O3 -g -std=c11 -Wall -Wextra -Werror -Wmissing-prototypes \
> -Wstrict-prototypes -Wold-style-definition tm17.c -o tm17
$
的输出,你会不会惊讶地得知,是:
Acme Widget™ 1.2.3
Acme Widget™ 1.2.3
Acme Widget™ 1.2.3
理论上,\u2122
是最好的(最便携的)符号使用。
我也测试过#define PRODUCT_NAME Acme Widget\u2122 1.2.3
;编译并生成相同的输出。
Unicode escapes被添加到C99;您可能需要指定-std=c99
或-std=gnu99
(或使用C11代替)以获取所需结果。
尝试一对引号。 – bmargulies
一开始:为什么不在文本周围添加'''?它应该是一个字符串文字,然后你应该检查你的编码。具体问题:提供一个[mcve]你为什么要添加UTF-8标签?你确定这是UTF-8?编译器使用哪个输入字符集?哪个输出字符集? – Olaf
原则上,你应该能够使用\ u2122来表示™(U + 2122或UTF-8中的十六进制字节E2 84 A2) –