Android下可用的wide char 函数库


Android的NDK对unicode支持的非常差,准确说是wide char系列函数支持都很差。很多函数声明和链接都没问题,但是不工作,用了以后没效果。这里提供一套可以用的宽字节函数库。使用非常简单,对应的函数后面都加 _x 后缀。

代码从我的引擎里出来的,编译的时候编译错误自己处理下,ds_string 和 ds_wstring改成 string和wstring 就好了。另外,_XEVOL_BASE_API_ 你自己看着办吧。哈哈。

点击下载

大部分的函数类似 wcslen的实现是从glibc里来的,问题不大。

主要是swprintf和swscanf函数。

这两个函数在glibc里巨复杂。

这里介绍一下我的处理方式:

对于swscanf 。我只是用来格式化输入一些数据的,不会出现输入字串的现象。于是我是先将它转成 ansi的字串,调用ansi的sscanf函数来完成。

对于swprintf。 则是自己写了一个。最终是分段调用sprintf函数。

第二个部分是编码方式的问题。

在Android低版本中是没有wcstombs这样的函数的,你可以编译过去。但是加载会找到不符号的。

所以,还是别用这样的函数了。

我们这里默认使用多字节编码是utf-8。所以说。所有的char* 都是utf-8字串。那么同样的UnicodeToLocale转出来的就是utf-8字串。 Locale == utf-8。这个在Linux下也是非常合理的。

这组函数类似如下:

XEvol_UnicodeToLocale

XEvol_Utf8ToUnicode。

这里utf-8 utf-16(vc下的wchar_t)和utf-32之间的转换我是扒了iccu的代码。可信度还是非常高的。

有这一套函数可以彻底的跟iconv说拜拜了。

另外,本人还是建议,尽量别用swprintf和swscanf这两个函数,用wstringstring吧。 stlport对这个的支持还是不错的。

相关内容