gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:15:42 26 4
gpt4 key购买 nike

我想获取文件中的字符数。我所说的字符是指“真实”字符,而不是字节。假设我知道文件编码。

我尝试使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com