Как читать юникод (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.txta
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-файл в двоичном режиме? (Я не уверен)
Благодарю вас.