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)吗?
非常感谢。
发布于 2011-11-25 06:39:44
mbstowcs()
会将字符串从当前语言环境的多字节编码转换为宽字符串。宽字符串不一定是unicode,但在Linux上是(UCS32)。
如果将语言环境设置为UTF,那么当前语言环境的多字节编码将是zh_CN.UTF-8
-8,而不是GB2312。您需要为使用该多字节编码处理的输入设置一个GB2312语言环境。
C标准意味着一个多字节字符最多只能生成一个宽字符,因此您可以使用strlen(src)
作为所需宽字符数量的上限:
size_t n = strlen(src) + 1;
wchar_t *dest = malloc(n * sizeof dest[0]);
(glibc有一个标准mbstowcs()
接口的扩展,允许你向它传递一个NULL
指针,以确定转换将产生多少个宽字符,但在安卓系统上这对你没有帮助。)它是这样工作的:
size_t n = mbstowcs(NULL, src, 0) + 1;
应该传递的n
的值是应该通过dest
指针写入的最大宽度字符数,包括终止null宽度字符。
然而,你应该考虑使用libiconv
,它已经成功编译用于安卓系统。它允许您显式地选择您感兴趣的源和目标字符集,并且更适合于这个问题。
https://stackoverflow.com/questions/8264869
复制