Welcome 微信登录

首页 / 操作系统 / Linux / 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_UnicodeToLocaleXEvol_Utf8ToUnicode。这里utf-8 utf-16(vc下的wchar_t)和utf-32之间的转换我是扒了iccu的代码。可信度还是非常高的。有这一套函数可以彻底的跟iconv说拜拜了。另外,本人还是建议,尽量别用swprintf和swscanf这两个函数,用wstringstring吧。 stlport对这个的支持还是不错的。