如何在Linux上的C中获取文件中的字符数(不是字节数)

Thi*_* D. 4 c linux unicode encoding

我想获取文件中的字符数.字符我的意思是"真正的"字符,而不是字节.假设我知道文件编码.

我尝试使用mbstowcs()但它不起作用,因为它使用系统区域设置(或使用setlocale定义的系统区域设置).因为setlocale不是线程安全的,所以我认为在调用之前使用它不是一个好主意mbstowcs().即使它是踩踏板安全的,我也必须确保我的程序不会在调用之间"跳转"(信号等)setlocale()(一次调用将其设置为文件的编码,然后调用revert)到前一个).

因此,举一个例子,假设我们有一个使用俄语编码(例如KOI8)编码的文件ru.txt.所以,我想打开文件并获取字符数,假设文件的编码是KOI8.

如果mbstowcs()可以采取source_encoding争论可能会很容易......

编辑:使用的另一个问题mbstowcs()是必须在系统上安装与文件编码对应的语言环境...

M.E*_*.L. 5

我建议使用iconv(3):

NAME
   iconv - perform character set conversion

SYNOPSIS
   #include <iconv.h>

   size_t iconv(iconv_t cd,
                char **inbuf, size_t *inbytesleft,
                char **outbuf, size_t *outbytesleft);
Run Code Online (Sandbox Code Playgroud)

并转换为utf32.对于每个转换的字符,您将得到4字节输出(对于BOM,加2).应该可以使用固定大小outbuf逐个转换输入,如果一个人仔细选择outbytesleft(即4*inbytesleft + 2 :-).