Comment lire un fichier unicode (utf-8) / binaire ligne par ligne

Hi programmeurs,

Je veux lire ligne par ligne Unicode (UTF-8) fichier texte créé par le bloc-notes, je ne veux pas afficher la chaîne Unicode dans l'écran, je veux juste lire et comparer les chaînes!.

Ce code lire ANSI fichier ligne par ligne et comparez les chaînes

Ce que je veux

Lire test_ansi.txt ligne par ligne

si la ligne = "b" imprimer "OUI!"

else print "NON!"

read_ansi_line_by_line.c

#include <stdio.h>

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

Compilation

gcc -o read_ansi_line_by_line read_ansi_line_by_line.c

Sortie

test_ansi.txt

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


Total: 3

Maintenant j'ai besoin de lire Unicode (UTF-8) fichier créé par le bloc-notes, après plus de 6 mois je n'ai pas trouvé de bon de code/bibliothèque en C peut lire le fichier codé en UTF-8!, je ne sais pas exactement pourquoi, mais je pense que le standard C ne prennent pas en charge Unicode!

Lecture Unicode fichier binaire son OK!, mais le probleme est le fichier binaire la plupart déjà être créés en mode binaire!, que dire si nous voulons lire un Unicode (UTF-8) fichier créé par le bloc-notes, nous avons besoin de le traduire à partir de fichier UTF-8 dans un fichier BINAIRE!

Ce code d'écriture chaîne Unicode dans un fichier binaire, REMARQUE le fichier C est codé en UTF-8 et compilé par GCC

Ce que je veux

Écrire le char Unicode "ب" à test_bin.dat

create_bin.c

#define UNICODE
#ifdef UNICODE
#define _UNICODE
#else
#define _MBCS
#endif

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

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;
}

Compilation

gcc -o create_bin create_bin.c

Sortie

create test_bin.dat

Maintenant, je veux lire le fichier binaire ligne par ligne et de comparer les!

Ce que je veux

Lire test_bin.dat ligne par ligne
si la ligne = "ب" imprimer "OUI!"
else print "NON!"

read_bin_line_by_line.c

#define UNICODE
#ifdef UNICODE
#define _UNICODE
#else
#define _MBCS
#endif

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

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;
}

Sortie

test_bin.dat

YES!

LE PROBLÈME

Cette méthode est TRÈS LONGUE! et PAS PUISSANT (je suis débutant en génie logiciel)

Veuillez tout savoir comment lire fichier Unicode ? (je sais que ce n'est pas facile!)
Merci de tout savoir, comment convertir le fichier Unicode dans un fichier Binaire ? (méthode simple)
Merci de tout savoir comment lire fichier Unicode en mode binaire ? (je ne suis pas sûr)

Merci.

source d'informationauteur Freeseif