如何在C中用特殊字符直接赋值字符串

How to do direct assignment of string with a special character in C

我发现我可以在 C:

中执行此操作非常有用
char *text;
text = "5 us";

但是,当我尝试这样做时

char *text;
text = "5 µs";

由于 Eclipse 中的 UTF-8 源代码编码(使用 CubeIDE),我得到了一个无关字符。所以字符串以字节形式看起来像这样:

0x35 0x20 0xC2 0xB5 0x73 0x00

我需要删除 0xC2 并且我不想编写一个函数来删除这个字符。我知道我可以配置 Eclipse 来处理我的 US-ASCII 源代码。但是,由于给定的分配

,我无法再保存我的文件
text = "5 µs";

除非我删除源代码中的 µ,否则 Eclipse 不会保存我的文件。

是否有类似下面的内容?

text = {'5', ' ', 181, 's', '0');

我只是不想以行人的方式经历创建全局字符串的过程。我想保留直接赋值的优雅。

抱歉,如果我没有使用正确的 C 术语,但我想你明白了要点。

µ不存在于ASCII字符集中

有许多 single-byte 扩展 ASCII 的编码 µ 映射到 0xB5,例如 ISO-8859-1、ISO-8859-3、ISO-8859-8、 Windows-1252等。

不清楚您想要哪一个,但很可能是 ISO-8859-1,又名 latin1,或 Windows-1252。如果您不确定,请查看编码的维基百科页面。

如果问题只是字符串打印不正确,最好的解决办法是将输出设备设置为 UTF-8。

如果不行,你可以告诉编译器你想要的执行字符集,也就是字符串字面量翻译成的字符集。

GCC 默认执行字符集为 UTF-8,但可以使用 -fexec-charset= 标志更改(使用上面给出的编码之一作为参数)。但是,这确实会产生全局影响,并且会弄乱需要不同编码(例如 UTF-8)的设备上的输出。

另请注意,源文件的编码无关紧要,如果您使用通用字符名称,结果也不会改变。字符串文字中的字符总是被转换为执行字符集。