Android下可用的wide char 函数库

2014-11-24 11:10:54 · 作者: · 浏览: 1

代码从我的引擎里出来的,编译的时候编译错误自己处理下,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对这个的支持还是不错的。