首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何正确调用mbstowcs?

如何正确调用mbstowcs?
EN

Stack Overflow用户
提问于 2011-11-25 12:40:41
回答 1查看 1.6K关注 0票数 0

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

我有一些用gb2312编码的信息,这需要在安卓平台上更改为统一码。

1.在调用此方法之前,是否可以设置LC_ALL(LC_ALL,“zh_n.utf-8”)?

2.多大的空间需要分配给dest?

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

非常感谢。

EN

回答 1

Stack Overflow用户

发布于 2011-11-25 14:39:44

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

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

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

代码语言:javascript
代码运行次数:0
运行
复制
size_t n = strlen(src) + 1;
wchar_t *dest = malloc(n * sizeof dest[0]);

(glibc有一个标准mbstowcs()接口的扩展,允许你向它传递一个NULL指针,以确定转换将产生多少个宽字符,但在安卓系统上这对你没有帮助。)它是这样工作的:

代码语言:javascript
代码运行次数:0
运行
复制
size_t n = mbstowcs(NULL, src, 0) + 1;

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

然而,你应该考虑使用libiconv,它已经成功编译用于安卓系统。它允许您显式地选择您感兴趣的源和目标字符集,并且更适合于这个问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8264869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档