Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 控制台输出中的UTF-8字符_C_Utf 8_Printf - Fatal编程技术网

C 控制台输出中的UTF-8字符

C 控制台输出中的UTF-8字符,c,utf-8,printf,C,Utf 8,Printf,我正在尝试使用C语言将aString打印到Windows控制台中。有没有办法打印↑或↓字符编码到输出中?为错误答案道歉。 经过一点搜索,我在网上找到了这个 对于(i=0;i有两种可能: 研究人员方法:查找有关您正在使用的控制台的文档。查找有关它使用的字符集的文档,并找到打印此字符集中存在的字符的方法 尝试和错误:以如下循环方式将所有255个字符打印到控制台 (i=1;i

我正在尝试使用
C
语言将
a
String
打印到Windows控制台中。有没有办法打印
字符编码到输出中?

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


对于(i=0;i有两种可能:

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

  • 尝试和错误:以如下循环方式将所有255个字符打印到控制台

  • (i=1;i<256;i++)的
    
    {
    printf(“%d:%c\n”,i,i);
    }
    

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

    如果您不介意使用WinAPI,请查看函数。它允许您将每个unicode字符打印到控制台。您可以使用
    L“character”或
    或。我建议使用第二种,因为它更便于移植,并且适用于运行时生成的字符串

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

    #包括
    int main()
    {
    常量字符*多字节=”↑↓";
    句柄句柄=GetStdHandle(标准输出句柄);
    WCHAR缓冲区[1024];
    德沃德计数;
    德沃德写的;
    count=MultiByteToWideChar(CP_UTF8,0,多字节,strlen(多字节),缓冲区,1024);
    WriteConsoleW(句柄、缓冲区、计数和写入,NULL);
    printf(“\n”);
    返回0;
    }
    
    这些都不是ASCII格式。那么,如果执行
    putc('↑');
    printf(“%s\n”↑);
    ?使用
    ^
    v
    怎么样?@wedapasi您的猜测是错误的。ASCII表中的符号0到31是不可打印的。DOS和其他系统滥用了这一点,并将可打印字符放在这些数字上,这是一种非标准扩展。类似地,DOS编译器使用了各种“扩展ASCII”"用于打印标准7位中未包含的各种字符的表格。在现代编程中,您将使用Unicode UTF-8或UTF-16。我不知道该页面在说什么,但它不是ASCII。ASCII代码72是
    H
    。是的,测试了此功能。它在Turbo C上工作,但在gcc编译器上不工作。正在寻找有效的解决方案到处都是。如果找到,将更新答案
    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. 
    
    for(i=1; i < 256; i++)
    {
        printf ("%d: %c\n", i, i);
    }
    
    #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;
    }