2017-02-15 42 views
0

utf-8で多くの異なる言語がエンコードされたcsvファイルがあります。私はファイルを解析し、無効な文字を検証する必要があります。示されているよう 私は下のサンプルプログラムを書かれている...UTF8でエンコードされた文字の比較

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

はどのようにして、無効な文字に対して、ファイルから読み込んだデータを比較していますか?

+1

'char型CH; '大失敗です。続行する前に APIを慎重に検討してください。 –

+0

'string invalidUTF8Chars =" ";'は配列ではありません。すべての無効な "文字"を含む文字列です。 – user1810087

+0

実際にUTF-8が必要な場合、リテラルは 'u8" \ u00A0 "'などの形式にする必要があります。あなたの現在のコードはUTF-8を使用せず、むしろシステムの狭いエンコーディング(同じであってもなくてもよい)を使用します。 –

答えて

0

strchr()が文字を見つけられなかった場合、NULLポインタを返します。何をする必要がリターンがNULLポインタだったかどうかをチェックすることです:

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

はここにあなたの便宜のためstrchr()参照です。

0

UTF-8の無効な文字は、UTF-8エンコーディングが無効で、いずれの文字にも対応していないか、UTF-8デコードで不要な文字になることを意味します。

各文字がUTF-8で1つ以上のバイトとしてエンコードされていて、具体的には "\ u005E"がUTF-8で1バイト、その他が2バイトである2番目の変形が必要です。

したがって、あなたはあなたの例では、個々のバイトを拒否することはできませんが、Unicodeで文字にデコードやUTF-8など、すべてを読み、その後のようなものを使用して問題を発見する必要があり、次のいずれか

if (strstr(readFile, u8"\u00A0") != nullptr || strstr(readFile, u8"\u005E") != nullptr ...) printf("Found bad character\n"); 
関連する問題