我先问了这个问题: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;