由于编码,无法很好地读取字符串

时间:2017-03-02 00:22:02

标签: c string compare

我先问了这个问题:strcmp function doesn't work while comparing string and user input which includes Turkish characters

但我发现了更具体的问题。当我使用setlocale(LC_ALL,“C”)时,我可以很好地获得用户输入,我的意思是没有任何字符问题。但我无法很好地从文本文件中获取字符串,它们已被损坏(例如:输出为Y而不是Ş)。如果我将setlocale设置为LC_ALL,“turkish”,那么用户的输入就会破坏。所以,我永远无法比较两个字符串,因为它们中的一个总是错误的。我该如何解决?

我尝试将文件保存为UTF-8和ANSI,但没有用。

操作系统:Windows10,IDE:CodeBlocks。

主要功能

    int i,j,x;
    char *target=malloc(sizeof(char)*25);
    char *source=malloc(sizeof(char)*25);
    printf("Source: ");
    scanf("%s",source);
    printf("%s",source);
    i=getID(source);
    setlocale( LC_ALL, "C" );
    printf("Target: ");
    scanf("%s",target);
    j=getID(target);
    setlocale( LC_ALL, "C" );
   printf("%s",source);//Works fine

getID函数的一部分:

    while(!feof(idList))
{
   /*Here reading strings line by line and spliting them.*/
    fgets(idListLine, 255, (FILE*)idList);
    char *tokenId = strtok(idListLine, s);
    j=0;
    while( tokenId != NULL )
    {
        idListStrings[j]=tokenId;
        j++;
        tokenId = strtok(NULL, s);
    }
    char *x=idListStrings[0];
    printf("%s",x); // Doesn't work fine

   setlocale(LC_ALL,"turkish");
    printf("||%s %s||\n\n",x,city);//x string works fine, city doesn't
    if(strcmp(x,city) == 0)//Never works because one of them is corrupted.
    {
        id=atoi(idListStrings[1]);
        break;
    }
}
fclose(idList);

return id;

0 个答案:

没有答案