ファイルからウルドゥー語のテキストを読み取って操作しようとしています。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);
}
そして、ここに私のサンプルテキストがあります:
میرا نام ابراھیم ھے۔
میں وینڈربلٹ یونیورسٹی میں پڑھتا ھوں۔
ただし、テキスト内の文字の 2 倍の文字が印刷されているようです。ワイド文字やマルチバイト文字が複数のバイトを使用することは理解していますが、このwchar_t
型はアルファベットの文字に対応するすべてのバイトをまとめて格納すると思いました。
いつでも変数に文字全体を格納できるように、テキストを読み取るにはどうすればよいですか?
私の環境の詳細:
gcc: (x86_64-posix-seh-rev0, Build by MinGW-W64 project) 5.3.0
OS: Windows 10 64 ビット
テキスト ファイルのエンコーディング: UTF-8
これは私のテキストが16進形式でどのように見えるかです:
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