在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) –