【问题标题】:UTF-8 character in console output控制台输出中的 UTF-8 字符
【发布时间】:2015-11-26 05:49:31
【问题描述】:

我正在尝试使用C 语言将printfString 输入Windows 控制台。有什么方法可以将 字符打印到输出中?

【问题讨论】:

  • 那些不是ASCII码。
  • 如果你这样做putc('↑');printf("%s\n", "↑");会发生什么?
  • 如何使用^v
  • @WedaPashi 你猜错了。
  • ASCII 表中的符号 0 到 31 是不可打印的。 DOS 和其他系统滥用这一点并将可打印字符也放在这些数字上,这是一种非标准扩展。同样,DOS 编译器使用各种“扩展 ASCII”表来打印标准 7 位未涵盖的各种字符。在现代编程中,您将使用 Unicode UTF-8 或 UTF-16。

标签: c utf-8 printf


【解决方案1】:

为错误的答案道歉。 经过一番搜索,我在网上找到了这个

https://answers.yahoo.com/question/index?qid=20131226030802AAnvC7n

for( i=0;i<256;i++)printf("%d %c\n ", i, ((char) i) ); 

 printf("%c %c %c %c\n", 24,25,26,27); \\This gives those characters. 

但是你能告诉我你使用的是哪个编译器吗,因为它不是在所有编译器中都打印箭头。

【讨论】:

  • 我不知道那个页面在说什么,但它不是 ASCII。 ASCII 码 72 是Hasciitable.com
  • 是的,对此进行了测试。它适用于 Turbo C,但不适用于 gcc 编译器。寻找适用于任何地方的解决方案。如果找到将更新答案
【解决方案2】:

有两种可能找出来:

  1. 研究人员方法:查找有关您正在使用的控制台的文档。查找有关它使用的字符集的文档,并找到打印此字符集中存在的字符的方法。

    1. 试错:在如下循环中将所有 255 个字符打印到控制台。

for(i=1; i < 256; i++)
{
    printf ("%d: %c\n", i, i);
}

这应该会在控制台屏幕上为您提供所需的所有信息。

【讨论】:

    【解决方案3】:

    如果您不介意使用 WinAPI,请查看WriteConsoleW 函数。它允许您将每个 unicode 字符打印到控制台。您可以使用L"character"MultiByteToWideChar 获得您角色的相应WCHAR 表示。我建议使用第二个,因为它更便携,适用于运行时生成的字符串。

    示例(源必须以 UTF-8 保存):

    #include <Windows.h>
    
    int main()
    {
        const char* multibyte = "↑↓";
        HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
        WCHAR buffer[1024];
        DWORD count;
        DWORD written;
        count = MultiByteToWideChar(CP_UTF8, 0, multibyte, strlen(multibyte), buffer, 1024);
        WriteConsoleW(handle, buffer, count, &written, NULL);
        printf("\n");
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 2010-12-12
      • 1970-01-01
      • 2018-06-18
      • 1970-01-01
      • 1970-01-01
      • 2012-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多