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

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

我尝试使用mbstowcs()但它不起作用,因为它使用系统区域设置(或使用setlocale定义的系统区域设置).因为setlocale不是线程安全的,所以在调用mbstowcs()之前我不认为使用它是个好主意.即使它是安全的,我也必须确定

我的程序不会在setlocale()的调用之间“跳转”(信号等)(一次调用将其设置为文件的编码,然后调用以恢复到前一次).

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

如果mbstowcs()可以采用source_encoding参数,那可能很容易……

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

我建议使用iconv(3):

NAME

iconv - perform character set conversion

SYNOPSIS

#include

size_t iconv(iconv_t cd,

char **inbuf, size_t *inbytesleft,

char **outbuf, size_t *outbytesleft);

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值