2017-02-15 192 views
0

有一個csv文件,它具有用UTF-8編碼的許多不同的語言。我必須解析文件並驗證無效字符。 我寫了下面所顯示的一個範例程序......比較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

'焦炭CH; '是一個巨大的錯誤;在繼續之前請仔細研究 API。 –

+0

'string invalidUTF8Chars =「」;'不是數組。它只是一個包含所有無效「字符」的字符串。 – user1810087

+0

如果你真的想要UTF-8,你的文字應該是'u8「\ u00A0」'等。您當前的代碼不使用UTF-8,而是系統的窄編碼(可能相同也可能不相同)。 –

回答

0

strchr()未能找到一個字符時,它返回一個空指針。什麼,你需要做的是檢查,如果換來的是一個空指針或不:

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

這裏是爲了方便您的strchr()參考。

0

UTF-8的無效字符可能意味着UTF-8編碼無效並且不對應任何字符,或者UTF-8解碼會導致您不需要的字符。

您對第二個變體感興趣,其中每個字符都以UTF-8格式編碼爲一個或多個字節,具體地說,「\ u005E」是UTF-8中的一個字節,其他字節是2個字節。

因此,你不能拒絕你的榜樣單個字節,但要麼需要解碼成Unicode字符或讀到的一切爲UTF-8,然後發現使用類似的問題:

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