比较UTF8编码的字符



有一个CSV文件,该文件在UTF-8中编码了许多不同的语言。我必须解析文件并验证无效字符。我在下面写了一个示例程序,如图所示…

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 charactern");
            }
        }
    }
        return 0;
}

如何将文件从文件中读取的数据与无效的字符进行比较?

strchr()找不到一个字符时,它会返回null-pointer。您需要做的是检查返回是否为null-pointer:

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

这是您方便的strchr()参考。

UTF-8的无效字符可能意味着UTF-8编码是无效的,并且与任何字符无关,或者UTF-8解码将导致一个字符你不想要。

您对第二个变体感兴趣,其中每个字符都被编码为UTF-8中的一个或多个字节,特别是" u005e"是UTF-8中的一个字节,其他字节是2个字节。

因此,您不能在示例中拒绝单个字节,但是要么需要解码为Unicode-character,要么将所有内容读取为UTF-8,然后使用以下内容以下内容找到问题:

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

最新更新