【发布时间】:2016-11-19 22:51:21
【问题描述】:
我正在尝试从文件中读取和操作乌尔都语文本。但是,似乎没有将字符全部读入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
【问题讨论】:
-
您需要提供更多详细信息,例如文本文件的编码、您使用的编译器和操作系统
-
@Amd 这可能是有用的信息,但肯定不是重复的
-
为了帮助了解发生了什么,您可以输出每个字符的字符代码