Không đọc được text file ở dạng Unicode

Mình có đoạn mã đếm số kí tự giống nhau từ một xâu
Mình tạo text file (đuôi .txt) chứa data với endcoding ở dạng unicode thì nó không đọc được, nhưng để ở dạng ANSI nó lại đọc được.
Ai giải thích giúp mình với?

#include<stdio.h>
#include<string.h>
void xuat(int a[],char str[])
{
	for(int i=0;i<26;i++)
	{
		printf("\n%c: %d",str[i],a[i]);
	}
}
void dem(char s[])
{
	strlwr(s);//vietthuonghet
	char str[26];
	strcpy(str,"abcdefghijklmnopqrstuvwxyz");
	int a[26]={0};
	for(int i=0;i<strlen(s);i++)
	{
		for(int j=0;j<26;j++)
		{
			if(s[i]==str[j]) a[j]++;
		}
	}
	xuat(a,str);
}
void nhap()
{
	FILE *fin= fopen("data.txt","r");
	char s[255];
	fgets(s,255,fin);
	fclose(fin);
	dem(s);
}
int main()
{
	nhap();
	return 0;
}

ko đọc được nghĩa là sao?

chọn lưu UTF-8 ấy :V

Unicode chắc là định dạng UTF-16 little endian, mỗi ký tự có kích cỡ 2 bytes, nếu chỉ lưu ký tự 8 bit thì 8 bit cao toàn có giá trị là 0, đọc vào C-string nó tưởng đó là ký tự NULL nên nó chỉ tính strlen tới đó thôi, ko đọc mấy ký tự đằng sau nữa :V

2 Likes

nay mình mới biết cái này bình thương toàn để mặc định tự nó lưu thôi

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?