ファイル内の文字数を取得したいと思います。文字とは、バイトではなく「実際の」文字を意味します。ファイルのエンコーディングを知っていると仮定します。
使用しようとしましmbstowcs()
たが、システム ロケール (または setlocale で定義されたロケール) を使用しているため、機能しません。setlocale はスレッドセーフではないため、 を呼び出す前に使用するのは得策ではないと思いますmbstowcs()
。たとえそれがトレッドセーフだったとしても、私のプログラムがsetlocale()
(ファイルのエンコーディングに設定するための 1 つの呼び出しと、元に戻すための呼び出しの間に) の呼び出しの間に「ジャンプ」(信号など) しないことを確認する必要があります。前のものへ)。
たとえば、ロシア語のエンコーディング (KOI8 など) を使用してエンコードされたファイルru.txtがあるとします。そこで、ファイルのエンコーディングがKOI8であると仮定して、ファイルを開いて文字数を取得したいと思います。
引数mbstowcs()
を取ることができれば、とても簡単かもしれません...source_encoding
編集:使用する他の問題mbstowcs()
は、ファイルのエンコーディングに対応するロケールをシステムにインストールする必要があることです...