如何使用 iso_8859-1 在 C 程序中输出度数符号?
Posted
技术标签:
【中文标题】如何使用 iso_8859-1 在 C 程序中输出度数符号?【英文标题】:how to output degree symbol in C programs with iso_8859-1? 【发布时间】:2015-10-17 15:02:50 【问题描述】:查了iso_8859-1的手册,找到度数符号:
Oct Dec Hex Char Description
260 176 B0 ° DEGREE SIGN
代码:
int main( int argc, char *argv[])
char chr = 176; //stores the extended ASCII of a symbol
printf("Character with an ascii code of 251: %c \n", chr);
return 0;
但它打印为?
。
如何在 C 程序中输出学位符号?我需要包含一些文件吗?
【问题讨论】:
您的区域设置未设置为 iso-8859-1(现在,utf-8 会很常见)或者您的字体是只是缺少相应的字形。但无论如何,这里的251
是什么?
您尝试这样做的方式是正确的,但您需要将终端配置为使用 ISO-8859-1。
如果你在 Windows 上工作肯定不是 iso8859-1,控制台使用某种“OEM corepage”。您应该使用 WideCharToMultibyte 从 wchar_t 转换。
@MatteoItalia 请使用wctomb()
,这是用于此目的的标准函数。
不要使用 iso-8859-1。 2015 年使用UTF-8 everywhere!
【参考方案1】:
摄氏度的 ASCII 码是 248。您可以在 C 中将其声明为 char。
#include<stdio.h>
void main()
char ch=248;
printf("Today's temperature was 23%cC",ch);
【讨论】:
ASCII 本身是 7 位,仅涵盖最多 127 个字符代码。也许有一些编码方案,其中字符 248 是度数符号,但它肯定不是 ASCII,你没有说哪一个是的,目前尚不清楚它是否是 OP 想要的。【参考方案2】:要使用 ASCII 以外的其他字符,在大多数平台上,您必须切换到能够处理此类字符的“语言环境”。在main
的开头你应该有
#include <locale.h>
int main(void)
setlocale(LC_ALL, "");
...
这里的空字符串""
字面上代表您平台的默认语言环境。
现在,您的平台支持什么语言环境是您必须自己找出来的,您没有向我们提供足够的信息。我强烈建议不要像你提议的那样使用过时的,而是使用 UTF-8。
通常您可以将 UTF-8 字符序列自然地嵌入到普通 C 字符串中,所以像 "105° C"
这样的东西应该打印为度数字符。
【讨论】:
虽然是正确的,但我认为这个答案正在打开一罐蠕虫,其中潜伏着龙和所有东西......我们已经“在那里”所以 utf-8 用 C 编码源代码被认为是“安全的选择”?即便如此,strlen()
之类的呢?将wchar_t
用于任何不在 us-ascii 中的东西将是真正安全的方法,但你必须为此解释更多:) (注意不是我的反对意见,但它可能是为了类似的疑问)
否决,setlocale(LC_ALL, "")
是灾难的根源,除了 C 语言环境(尤其是关于 LC_NUMERIC),几乎没有库可以使用任何东西。 LC_CTYPE 可能,但是您仍然必须小心,因为您正在以特定于系统的方式修改程序的全局状态 - 您确定您的所有程序都准备好使用标准库函数(看起来像 scanf 或strtod) 以系统和平台相关的方式进行了巧妙的修改?
@FelixPalmen:wchar_t 是一个红鲱鱼,它的指定如此模糊以至于它无论如何都不能移植(在 Windows 上它是 UTF-16,所以你仍然担心可变长度编码)并且非常糟糕到处都支持(在 Unix 上大多被忽略,并尝试在 Windows 上使用带有任何模糊奇异字符的 wcout)。
@MatteoItalia 确实,我记得很久以前就在那里,然后使用我自己的存储格式,一个字符为 4 个字节,以及iconv()
。是的,龙....(顺便说一句,您认为支持整个 Unicode 范围的最佳做法是什么?我想只使用一些现有的库?)
@MatteoItalia 也许我记错了,但我认为情况更糟,Windows 上的 wchar_t
只是 UCS-2?以上是关于如何使用 iso_8859-1 在 C 程序中输出度数符号?的主要内容,如果未能解决你的问题,请参考以下文章
我们在 web 应用开发过程中经常遇到输出某种编码的字 符, 如 iso8859-1 等, 如何输出一个某种编码的字符串?
我们在web应用开发过程中经常遇到输出某种编码的字符,如ISO8859-1等,如何输出一个某种编码的字符串?
如何将汉字转换为iso-8859-1的字符串 - PHP进阶讨论
如何使用编码 ISO-8859-1 在 PHP 中编写文件? [复制]