gpt4 book ai didi

android - 如何正确调用 mbstowcs?

转载 作者:太空宇宙 更新时间:2023-11-04 09:53:34 25 4
gpt4 key购买 nike

size_t mbstowcs(wchar_t *dest, const char *src, size_t n);

我有一些使用 gb2312 编码的信息,需要在 android 平台上更改为 unicode。

1.在调用这个方法之前,是否设置locale(LC_ALL, "zh_CN.UTF-8")?

2.需要分配多大的dest?

3.传递给n的是什么,是strlen(src)吗?

非常感谢。

最佳答案

mbstowcs() 会将字符串从当前语言环境的多字节编码转换为宽字符串。宽字符串不一定是 unicode,但在 Linux 上它们是 (UCS32)。

如果您将语言环境设置为 zh_CN.UTF-8,则当前语言环境的多字节编码将为 UTF-8,而不是 GB2312。您需要为要使用该多字节编码处理的输入设置 GB2312 语言环境。

C 标准意味着单个多字节字符最多会产生一个宽字符,因此您可以使用 strlen(src) 作为所需宽字符数的上限:

size_t n = strlen(src) + 1;
wchar_t *dest = malloc(n * sizeof dest[0]);

(glibc 对标准 mbstowcs() 接口(interface)进行了扩展,它允许您向它传递一个 NULL 指针以查明将产生多少个宽字符通过转换,但这在 Android 上对你没有帮助。)它是这样工作的:

size_t n = mbstowcs(NULL, src, 0) + 1;

应传递的 n 的值是应通过 dest 指针写入的最大宽字符数,包括终止空宽字符。

但是,您应该改用 libiconv,它已经为 Android 成功编译。它允许您明确选择您感兴趣的源字符集和目标字符集,并且更适合这个问题。

关于android - 如何正确调用 mbstowcs?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8264869/

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