扩展ACSII在C语言中阅读非英语文本的问题

扩展ACSII在C语言中阅读非英语文本的问题,c,readfile,extended-ascii,C,Readfile,Extended Ascii,几天来,我一直在尝试解决扩展ASCII的问题。我有一个程序可以读取文本文件并提取单词。问题是这些文本可能是用不同的语言写成的​​带着口音 我读了很多关于扩展ASCII相关问题的信息。但是,我没有给出一个示例或信息,使我能够仅使用标准库来解决这个问题 我的程序应该能够读取程序已经读取的文本文件,并删除可能包含重音的单词,丢弃各种图形分数,如?。此外,我还了解到,您应该使用无符号字符,从而能够捕获0到256之间编码的任何字符。但是,该实现也不适用于无符号字符 void readFileChar(FI

几天来,我一直在尝试解决扩展ASCII的问题。我有一个程序可以读取文本文件并提取单词。问题是这些文本可能是用不同的语言写成的​​带着口音

我读了很多关于扩展ASCII相关问题的信息。但是,我没有给出一个示例或信息,使我能够仅使用标准库来解决这个问题

我的程序应该能够读取程序已经读取的文本文件,并删除可能包含重音的单词,丢弃各种图形分数,如?。此外,我还了解到,您应该使用无符号字符,从而能够捕获0到256之间编码的任何字符。但是,该实现也不适用于无符号字符

void readFileChar(FILE* file, tDictionary *dictionary) {
    char buffer[100];
    unsigned char c;
    int index = 0;

    if (file == NULL) {
        printf("Error\n");
        exit(1);
    }

    c = fgetc(file);
    while(feof(file) == 0) {
        if ((!ispunct(c)) && (!isspace(c)) && (isalpha(c)))){
            buffer[index] = c;
            index++;
        }else{
            buffer[index] = '\0';
            if(strlen(buffer) != 0){
                printf("**************\n");
                printf("%s\n", buffer);
                index = 0;
            }
        }
        c = fgetc(file);
    }
    fclose(file);
}
我正在使用fgetc函数逐个字符地收集数据。问题是,该计划只是丢弃了一些项目,比如重音字母í、ç、ê、ô,所以你不应该花费太多


是否有人有在所述条件下运行的推荐或示例程序?

isalpha可能无法识别重音字符:。为它们中的每一个添加显式测试。小心!没有一个扩展ASCII集!您的代码可能对您的测试文件有效,但对另一个测试文件无效。您的意思是要放弃所有非ASCII字符,还是要根据统计信息、环境、使用的特定字符集进行识别并对其执行正确的操作?在第一种情况下,放弃所有>127,在第二种情况下,避免使用C SBCS字符分类函数,因为它们本质上是单字节的。相反,转换为UTF-8并使用ICU。不同的语言对其特殊字母、符号和重音使用不同的字符代码。这些字符通常以每个字母+符号+重音/多个字节的形式进行编码。首先,使用十六进制编辑器以字节的形式查看文本,查看扩展字符的编码方式,然后查看代码的UNICODE版本。此外,正如前面提到的,输入文本可能采用其他编码方案,如utf8、utf16、utf32等。因此,如果我理解正确,使程序工作的唯一方法是将输入转换为UTF-8并使用ICU。你知道一个示例程序吗?谢谢你的回答!首先,您必须了解正在读取的文件的字符集和编码。可能您只知道它们是平台默认值。然后,您必须使用与该编码一起工作的库或转换该编码。您可以将所有输入转换为UTF-8。事实上,这可以解决您的问题—您还没有说为什么要读入文件并丢弃部分内容。