如何使用 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 中编写文件? [复制]

iconv 中的输出缓冲区为空,同时从 ISO-8859-1 转换为 UTF-8

从 UTF-8 编码的 XML 源生成 ISO-8859-1 编码的文本输出