如何在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)的设备上的输出。
另请注意,源文件的编码无关紧要,如果您使用通用字符名称,结果也不会改变。字符串文字中的字符总是被转换为执行字符集。
我发现我可以在 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)的设备上的输出。
另请注意,源文件的编码无关紧要,如果您使用通用字符名称,结果也不会改变。字符串文字中的字符总是被转换为执行字符集。