如何使用 mblen()?

问题描述 投票:0回答:1

这里有一些测试代码可以帮助我理解多字节字符管理。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[]) {
    char * line = malloc(1024);
    size_t n;

    getline(&line, &n, stdin);
    while (*line) {
        int offset = mblen(line, strlen(line));
        if (offset == -1) return 0;
        printf("%d\n", offset);
        line += offset;
    }
    return 0;
}

据我了解,如果用户输入“éléphant”,我的输出应该显示 2 1 2 1 ...
然而,它从第一个字节开始就显示 -1 表示

mblen
错误。 我认为这可能不是这两行代码中的错误,我必须做什么,我可以阅读哪些资源来获得有关这里发生的情况的提示?
当然,
printf("%s", line)
可以(并且确实)完美地工作。

c multibyte-functions
1个回答
5
投票

将我的评论变成答案。

详细信息可能取决于您的确切执行环境,但我认为以下内容应该适用于大多数 *NIX 系统。

mblen
取决于当前区域设置

此函数的行为受当前语言环境的 LC_CTYPE 类别影响

启动时的默认区域设置是“C”区域设置(请参阅

setlocale
),这可能与您的期望不符。您可以方便地调用
setlocale(LC_CTYPE, "")
将语言环境设置为“本机”环境。

请注意,调用

setlocale(LC_ALL, "")
(如我最初所写)的更改可能超出您的预期,因此在执行此操作之前,请务必阅读所有与语言环境相关的内容。

© www.soinside.com 2019 - 2024. All rights reserved.