C 从UTF8读取中的文件

C 从UTF8读取中的文件,c,utf-8,C,Utf 8,我正在尝试读取包含UTF-8格式字符的文件 FILE * f = fopen(argv[1], "r"); if(f == NULL){ printf("cannot open %s\n", argv[1]); exit(-1); } unsigned int c = getc(); while(c != EOF){ printf("%d\n", c); // UB

我正在尝试读取包含UTF-8格式字符的文件

    FILE * f = fopen(argv[1], "r");
    if(f == NULL){
            printf("cannot open %s\n", argv[1]);
            exit(-1);
        }
    unsigned int c = getc();
    while(c != EOF){
        printf("%d\n", c);  // UB
        c = getchar();

    }
如何读取中的文件,使其以位表示?例如,它看起来像:
0xA3
。 现在它正在打印实际的整数。
基本上,如何以逐位格式读取字符?

utf-8文件读取的示例

#include <stdio.h>
#include <wchar.h>
#include <locale.h>
#include <stdlib.h>

int main(int argc, char *argv[]){
        setlocale(LC_ALL, "en_US.UTF-8");
        FILE * f = fopen(argv[1], "r");
        if(f == NULL){
                printf("cannot open %s\n", argv[1]);
                exit(-1);
        }
        wchar_t wc;
        while((wc=fgetwc(f))!=WEOF){
                //wprintf(L"%lc", wc);
                // for output as hex of uthf-8 characters
                wprintf(L"0X%X,",(wint_t) wc);
        }
        wprintf(L"\n");
        fclose(f);
        return 0;
}
#包括
#包括
#包括
#包括
int main(int argc,char*argv[]){
setlocale(LC_ALL,“en_US.UTF-8”);
文件*f=fopen(argv[1],“r”);
如果(f==NULL){
printf(“无法打开%s\n”,argv[1]);
出口(-1);
}
wchar_t wc;
而((wc=fgetwc(f))!=WEOF){
//wprintf(L“%lc”,wc);
//输出为uthf-8字符的十六进制
wprintf(L“0X%X”,(wint_t)wc);
}
wprintf(L“\n”);
fclose(f);
返回0;
}

由于您编写代码的方式,它正在打印整数。你能解释一下你想做什么吗?你知道UTF-8是一种多字节编码吧?把
printf(“%d\n”,c)
改为
printf(“%x\n”,c)
现代二进制计算机中的所有数据都是二进制形式的。这只是选择如何显示数据的问题。在你的情况下,我建议你阅读更多关于它和它的不同格式。另外,几乎任何一本书或教程都会告诉你如何用十六进制表示法打印任何整数。@RetiredInja基本上我的目标是在打印F中将UTF8解码为utf32…x而不是d。这是不可移植的。我想这里使用的所有函数都可以在标准c中使用。我没有得到什么,它不是便携式的?你能告诉我们吗?地区名称不可移植。不能保证实现支持utf-8区域设置。代码应该检查setlocale(LC_ALL,“en_US.utf-8”)的结果是否成功,并将其处理为可移植的。顺便说一句:OP希望输出类似0xA3,这肯定不会由wprintf(L“%LC”,wc)产生。