2017-02-15 8 views
0

Es gibt eine CSV-Datei, die die vielen verschiedenen Sprachen in utf-8 codiert hat. Ich muss die Datei analysieren und auf ungültige Zeichen überprüfen. Ich habe ein Beispielprogramm, das unten geschrieben wird, wie gezeigt ...Vergleicht UTF8-codierte Zeichen

int main(void) 
{ 
    string invalidUTF8Chars = ""; // Invalid UTF-8 Chars array. 
    invalidUTF8Chars+= "\u00A0"; 
    invalidUTF8Chars+= "\u005E"; 
    invalidUTF8Chars+= "\u00FE"; 
    invalidUTF8Chars+= "\u00BA"; 
    invalidUTF8Chars+= "\u00AF"; 

    FILE* fp; 
    char ch; 
    fp = fopen("unicodeUTF8TextFile.txt","r"); 

    if(fp != NULL) 
    { 
     while((ch = fgetc(fp)) != EOF) // Reading byte by byte form input file. 
     { 
      //if (strchr(invalidUTF8Chars.c_str(), ch)) // How do I validate here? 
      { 
       printf("Invalid character\n"); 
      } 
     } 
    } 
     return 0; 
} 

Wie vergleiche ich die aus der Datei gegen die ungültige Zeichen lesen Daten?

+1

'char ch; 'ist ein großer Fehler; Bitte lesen Sie die API sorgfältig, bevor Sie fortfahren. –

+0

'string invalidUTF8Chars =" ";' ist kein Array. Es ist nur eine Zeichenfolge, die alle ungültigen "Zeichen" enthält. – user1810087

+0

Ihre Literale sollten die Form 'u8 "\ u00A0" 'usw. haben, wenn Sie eigentlich UTF-8 wollen. Ihr aktueller Code verwendet nicht UTF-8, sondern die Encodierung des Systems (die identisch oder nicht identisch sein kann). –

Antwort

0

Wenn strchr() kein Zeichen findet, gibt es einen NULL-Zeiger zurück. Was Sie tun müssen, um zu überprüfen, ob die Rückkehr ein NULL-Zeiger war oder nicht:

if(strchr(invalidUTF8Chars.c_str(), ch) == nullptr){ 
    printf("Invalid character\n"); 
} 

Hier ist die strchr() Referenz für Ihre Bequemlichkeit.

0

Ungültiges Zeichen für UTF-8 bedeutet möglicherweise, dass die UTF-8-Codierung ungültig ist und keinem Zeichen entspricht oder dass die UTF-8-Decodierung zu einem Zeichen führt, das nicht gewünscht wird.

Sie sind an der zweiten Variante interessiert, bei der jedes Zeichen in UTF-8 als ein oder mehrere Bytes codiert ist, dh "\ u005E" ist ein Byte in UTF-8 und die anderen sind 2 Byte.

So können Sie nicht einzelne Bytes in Ihrem Beispiel ablehnen, würde aber entweder müssen Unicode-Zeichen entschlüsseln oder alles als UTF-8 lesen und dann die Probleme finden, mit so etwas wie:

if (strstr(readFile, u8"\u00A0") != nullptr || strstr(readFile, u8"\u005E") != nullptr ...) printf("Found bad character\n"); 
Verwandte Themen