Как читать юникод (utf-8) / двоичный файл построчно

Привет программисты,

Я хочу читать построчно текстовый файл Unicode (UTF-8), созданный Notepad, я неЯ не хочу отображать строку Unicode на экране, я хочу просто прочитать и сравнить строки !.

Этот код читает файл ANSI построчно и сравнивает строки

Что я хочу

Читайте test_ansi.txt построчно

если строка = "b" Распечатать "ДА!"

еще печать "НЕТ!»

read_ansi_line_by_line.c
#include 

int main()
{
    char *inname = "test_ansi.txt";
    FILE *infile;
    char line_buffer[BUFSIZ]; /* BUFSIZ is defined if you include stdio.h */
    char line_number;

    infile = fopen(inname, "r");
    if (!infile) {
        printf("\nfile '%s' not found\n", inname);
        return 0;
    }
    printf("\n%s\n\n", inname);

    line_number = 0;
    while (fgets(line_buffer, sizeof(line_buffer), infile)) {
        ++line_number;
        /* note that the newline is in the buffer */
        if (strcmp("b\n", line_buffer) == 0 ){
            printf("%d: YES!\n", line_number);
        }else{
            printf("%d: NO!\n", line_number,line_buffer);
        }
    }
    printf("\n\nTotal: %d\n", line_number);
    return 0;
}
test_ansi.txt
a
b
c
составление
gcc -o read_ansi_line_by_line read_ansi_line_by_line.c
Выход
test_ansi.txt

1: NO!
2: YES!
3: NO!


Total: 3

Теперь мне нужно прочитать файл Unicode (UTF-8), созданный Блокнотом, после более чем 6 месяцев я неЯ не нашел ни одного хорошего кода / библиотеки в C, который мог бы читать файл, закодированный в UTF-8!не знаю точно, почему, но я думаю, что стандарт C нене поддерживает Unicode!

Чтение двоичного файла Unicode - это нормально !, но проблема в том, что двоичный файл чаще всего уже создается в двоичном режиме !, это означает, что если мы хотим прочитать файл Unicode (UTF-8), созданный Notepad, нам нужно перевести его из UTF-8 файл в двоичный файл!

Этот код записывает строку Unicode в двоичный файл, ПРИМЕЧАНИЕ. Файл C кодируется в UTF-8 и компилируется GCC.

Что я хочу

Напишите символ Unicode "ب" test_bin.dat

create_bin.c
#define UNICODE
#ifdef UNICODE
#define _UNICODE
#else
#define _MBCS
#endif

#include 
#include 

int main()
{
     /*Data to be stored in file*/
     wchar_t line_buffer[BUFSIZ]=L"ب";
     /*Opening file for writing in binary mode*/
     FILE *infile=fopen("test_bin.dat","wb");
     /*Writing data to file*/
     fwrite(line_buffer, 1, 13, infile);
     /*Closing File*/
     fclose(infile);

    return 0;
}
составление
gcc -o create_bin create_bin.c
Выход
create test_bin.dat

Теперь я хочу прочитать двоичный файл построчно и сравнить!

Что я хочу

Читайте test_bin.dat построчно, если строка = "ب" Распечатать "ДА!" еще печать "НЕТ!»

read_bin_line_by_line.c
#define UNICODE
#ifdef UNICODE
#define _UNICODE
#else
#define _MBCS
#endif

#include 
#include 

int main()
{
    wchar_t *inname = L"test_bin.dat";
    FILE *infile;
    wchar_t line_buffer[BUFSIZ]; /* BUFSIZ is defined if you include stdio.h */

    infile = _wfopen(inname,L"rb");
    if (!infile) {
        wprintf(L"\nfile '%s' not found\n", inname);
        return 0;
    }
    wprintf(L"\n%s\n\n", inname);

    /*Reading data from file into temporary buffer*/
    while (fread(line_buffer,1,13,infile)) {
        /* note that the newline is in the buffer */
        if ( wcscmp ( L"ب" , line_buffer ) == 0 ){
             wprintf(L"YES!\n");
        }else{
             wprintf(L"NO!\n", line_buffer);
        }
    }
    /*Closing File*/
    fclose(infile);
    return 0;
}
Выход
test_bin.dat

YES!
ЭТА ПРОБЛЕМА

Этот метод очень длинный! и НЕ МОЩНЫЙ (я новичок в разработке программного обеспечения)

Пожалуйста, кто-нибудь знает, как прочитать файл Unicode? (Я знаю, это не просто!) Пожалуйста, кто-нибудь знает, как конвертировать файл Unicode в двоичный файл? (простой метод) Кто-нибудь знает, как читать Unicode-файл в двоичном режиме? (Я не уверен)

Благодарю вас.

Ответы на вопрос(6)

Ваш ответ на вопрос