ファイルからユニコード文字を読み取る必要があります。私がそれらから行う必要があるのは、Unicode番号を抽出することだけです。私はCodeBlock Mingwを使用してWindows XP上で動作しています。Cのファイルからユニコード文字を読み取る
私は255のようにすべての時間を、結果を取得しています。この
#define UNICODE
#ifdef UNICODE
#define _UNICODE
#else
#define _MBCS
#endif
#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
int main()
{
wchar_t *filename=L"testunicode.txt";
FILE *infile;
infile=_wfopen(filename,L"r");
wchar_t result=fgetwc(infile);
wprintf(L"%d",result);//To verify the unicode of character stored in file,print it
return 0;
}
ような何かをやっています。
testunicode.txtが(メモ帳で作成)をコード=ユニコード
に格納され、最終的なタスクは、任意の言語の文字を含むことができ、ファイルから読み取ることであるが、2バイトだけなのでのwchar_tであることができるようになりますすべての可能性のある文字のユニコードを取得しますか?
...お返事のための
おかげで、誰もがあなたの助けを必要としています。
ここでコードを変更しました。
#define UNICODE
#ifdef UNICODE
#define _UNICODE
#else
#define _MBCS
#endif
#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
int main()
{
wchar_t *filename=L"testunicode.txt";
FILE *infile;
infile=_wfopen(filename,L"r");
wchar_t b[2];
fread(b,2,2,infile);//Read a character from the file
wprintf(L"%d",b[1]);
return 0;
}
正しいUTF 16コードを出力します。それが使用されるプロジェクトでは、世界のさまざまな言語の文字を読み込む必要があります。 UTF-16はサフィックスになりますか、または保存されたファイルのエンコーディングをUTF-32に変更する必要がありますか?また、ここでwchar_tは2バイト、UTF-32では4バイトのデータ型が必要です。それを達成する方法は?お返事のために再び
おかげで........
[リトルエンディアン](http://en.wikipedia.org/wiki/Little-endian)[UTF-16バイトオーダーマーク](http://en.wikipedia.org/wiki)/Byte_order_mark#UTF-16)は、ファイルの最初のバイトとして '0xFF'(255)を持ちます。あなたのコードはファイルの個々のバイトをループしないので、常に同じバイトが得られます。 –
@FrédéricHamidi、fgetwcは最初の2バイトを単一の16ビット値として返すべきではありませんか?もしそうなら、結果は0xfffeではありませんか? –
@マーク、nope、[fgetwc()](http://msdn.microsoft.com/en-us/library/c7sskzc1%28v=vs.100%29。aspx)は、ストリームがテキストモードまたはバイナリモードで開かれるかどうかに応じてマルチバイト文字またはワイド文字を読み取ります。[[_ wfopen()](http://msdn.microsoft.com/en-us/library /yeby3zcb%28v=vs.100%29.aspx)は 'mode'引数なしではデフォルトで' text'になるので、 'fgetwc()'はマルチバイト文字を読み込み、 '0xFF'でチョークし、だから私は実際にこの仮説をテストしなかったと思う)*。 –