【问题标题】:How to print root symbol with c in a file如何在文件中用c打印根符号
【发布时间】:2014-09-09 17:09:15
【问题描述】:

我有一个名为 output.txt 的文件,我想在其中打印一个根 (√) 符号。 这是我的程序

#include<stdio.h>
#include<conio.h>
void main(void)
{
    FILE *fptr;     
    fptr = fopen("output.txt","w+"); //open the file to write 
    fprintf(fptr,"\xfb");            // \xfb is the hexadecimal code for root symbol
    fclose(fptr);
}

但是当我运行程序时 (û) 会打印在其中

【问题讨论】:

  • û 是代码点 \xfb 的 unicode 字符。

标签: c file-io ascii


【解决方案1】:

您遇到的问题是因为您试图使用扩展 ASCII 集的一部分(即:值超过 127 的字符)。 代码页 是您设置的,因此如果设置了 8 位 ASCII 符号的 MSB,它可以映射到多个不同代码页之一,具体取决于区域/语言环境、操作系统等(即:希腊语、拉丁语等)。在大多数情况下,ASCII 字符一般被认为是 7 位,忽略代码页启用位。

尝试使用扩展 ASCII 不是一种可移植的方法,因此您最好的选择是:

  1. 利用 unicode
  2. 确保您的 C 编译器与 C99 兼容。

下面的例子解决了原来的问题。

源代码


#include <stdio.h>

void main(void) {
    FILE *fptr;     
    fptr = fopen("output.txt","w+"); //open the file to write 
    fprintf(fptr, "\u221A\n");
    fclose(fptr);
}

样品运行的输出


参考文献


  1. 如何通过 C 程序打印 127 到 160 的扩展 ASCII 字符?,访问时间:2014-04-16,&lt;https://stackoverflow.com/questions/16359225/how-to-print-extended-ascii-characters-127-to-160-in-through-a-c-program&gt;
  2. Unicode 字符 'SQUARE ROOT' (U+221A),于 2014 年 4 月 16 日访问,&lt;http://www.fileformat.info/info/unicode/char/221a/index.htm&gt;

【讨论】:

  • 只是补充一点... 0xfb 是代码页 437(旧 DOS/Windows)中的平方根符号。更现代的 Windows 版本似乎没有在典型的代码页 1250 或 1252 中包含平方根符号,而且它似乎也不存在于任何 ISO-8859 字符集中。因此,除非您可以确保为代码页 437 设置了终端环境,否则在正确配置的支持 Unicode 的终端中使用 Unicode \u221a 是可行的方法。
  • @twalberg 如何确保将终端环境设置为代码页 437
  • 您需要确保您拥有 1) 支持 CP437 的字体,2) 安装了基于 CP437 的语言环境,3) 支持 CP437 的终端仿真器,可能还有其他一些东西,然后制作确保它们都已正确配置...我认为,至少在现代系统上,仅使用 Unicode 路线就可以减少工作量,因为 CP437 被广泛认为已过时/不推荐使用/已死。
猜你喜欢
  • 1970-01-01
  • 2017-03-25
  • 2017-10-05
  • 2015-06-26
  • 2020-06-12
  • 1970-01-01
  • 1970-01-01
  • 2013-11-22
  • 2022-11-26
相关资源
最近更新 更多