我正在尝试从文件中读取和操作乌尔都语文本。但是,似乎没有将字符全部读入wchar_t
变量中。这是我的代码,它读取文本并在新行中打印每个字符:
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
void main(int argc, char* argv[]) {
setlocale(LC_ALL, "");
printf("This program tests Urdu reading:\n");
wchar_t c;
FILE *f = fopen("urdu.txt", "r");
while ((c = fgetwc(f)) != WEOF) {
wprintf(L"%lc\n", c);
}
fclose(f);
}
这是我的示例文本:
میرا نام ابراھیم ھے۔
میں وینڈربلٹ یونیورسٹی میں پڑھتا ھوں۔
但是,打印的字符数似乎是文本中字母的两倍。我知道宽或多字节字符使用多个字节,但我认为该wchar_t
类型会将与字母表中的字母对应的所有字节存储在一起。
如何阅读文本以便在任何时候都将整个字符存储在变量中?
关于我的环境的详细信息:
gcc:(x86_64-posix-seh-rev0,由 MinGW-W64 项目构建)5.3.0
操作系统:Windows 10 64 位
文本文件编码:UTF-8
这就是我的文本在十六进制格式中的样子:
d9 85 db 8c d8 b1 d8 a7 20 d9 86 d8 a7 d9 85 20 d8 a7 d8 a8 d8 b1 d8 a7 da be db 8c d9 85 20 da be db 92 db 94 ad 98 5d b8 cd ab a2 0d 98 8d b8 cd 98 6d a8 8d 8b 1d 8a 8d 98 4d 9b 92 0d b8 cd 98 8d 98 6d b8 cd 98 8d 8b 1d 8b 3d 9b 9d b8 c2 0d 98 5d b8 cd ab a2 0d 9b ed a9 1d ab ed 8a ad 8a 72 0d ab ed 98 8d ab ad b9 4a