作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我想获取文件中的字符数。我所说的字符是指“真实”字符,而不是字节。假设我知道文件编码。
我尝试使用 mbstowcs()
但它不起作用,因为它使用系统区域设置(或使用 setlocale 定义的区域设置)。因为 setlocale 不是线程安全的,所以我认为在调用 mbstowcs()
之前使用它不是一个好主意。即使它是安全的,我也必须确定我的程序不会在 setlocale()
的调用之间“跳转”(信号等)(一次调用将其设置为文件的编码,一次调用恢复到前一个) .
因此,举个例子,假设我们有一个使用俄语编码(例如 KOI8)编码的文件 ru.txt。所以,我想打开文件并获取字符数,假设文件的编码是 KOI8。
如果 mbstowcs()
可以接受一个 source_encoding
参数,那就太简单了...
编辑:使用 mbstowcs()
的另一个问题是必须在系统上安装与文件编码对应的语言环境...
最佳答案
我建议使用 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);
并转换为 utf32。每个转换的字符都会得到 4 个字节的输出(加上 2 个 BOM)。如果仔细选择 outbytesleft(即 4 * inbytesleft + 2 :-),应该可以使用固定大小的 outbuf 逐段转换输入。
关于c - 如何在 Linux 上的 C 中获取文件中的字符数(不是字节数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18186412/
我是一名优秀的程序员,十分优秀!