用fopen C读取utf-8编码文件

问题描述 投票:0回答:1

我创建了一个包含以下字符的文本文件来测试 utf-8 编码:

%gÁüijȐʨΘЋЮѦҗԘՔהڳضणணษ༒Ⴃᎃᡧᬐ⁜₪≸☺⛜⺟むヸ㒦㢒

我还用 C 语言编写了这个程序来打开文件并读取它:

#pragma warning(disable:4996)

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

int main() {
    FILE *ptr;
    ptr = fopen("inputtest.txt", "r, ccs=UTF-8");
    char input[50];
    if (ptr == NULL)
        perror("Error opening file");
    else {
        if (fgets(input, 50, ptr) != NULL) {
            puts(input);
        }
        printf(input);
        fclose(ptr);
    }
}

如果我不使用

ccs=UTF-8
,我会得到一些不可读的字符。但有了它,程序就会崩溃并显示代码
-1073740791
。此外,在使用
wchar_t
fgetws
后,程序的输出只是
%
。 注意:我使用的是Windows 11和Visual Studio 2022,我需要输入多语言字符。

c utf-8 fopen
1个回答
0
投票

在所有情况下您都拨打

printf(input)

  • input
    失败时,
    fgets()
    的内容是不确定的。使用这样的格式字符串调用 
    printf
     具有未定义的行为。
  • 如果
  • fgets()
     成功,用从文件中读取的字符串调用 
    printf
     是一件有风险的事情。如果字符串包含 
    %
     符号,但后面没有紧跟着另一个 
    %
    ,则该行为未定义,因为 
    printf
     将查找您未传递的变量参数。
不清楚为什么你会接到这个电话,你应该删除它。

© www.soinside.com 2019 - 2024. All rights reserved.