原文发布:http://www.hellocpp.net/Articles/Article/779.aspx
附件也请到这里去下载, csdn不知道怎么上传附件。如果上面的网页打不开,说明我还没找到后台管理的密码,稍后想起来了,文章审核到前台就看到了。
附件地址http://www.hellocpp.net/Common/Download.aspx?attachment_id=446。 但愿你能下的到。

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对这个的支持还是不错的。


更多相关文章

  1. android: Can't create handler inside thread that has not cal
  2. 关于Android(安卓)Settings中的八个问题
  3. Android使用Intent返回上一个Activity时StackOverflowError
  4. Jenkins + Unity + Android构建基于Unity的自动编译环境
  5. Android,一个函数实现上传文件(单个,多文件)
  6. 快速反编译APK
  7. 加快Android(安卓)Studio的编译速度
  8. Android(安卓)FFmpeg(一)、Windows编译So
  9. Android(安卓)4.x耳机插拔检测实现方法

随机推荐

  1. Android 配置环境变量
  2. android SD卡读写权限
  3. Android监听网络变化
  4. Android实现输入法弹出时把布局顶上去和
  5. Android Environment 常量含义
  6. android textview一行显示
  7. Android 电子 罗盘 & 指南针
  8. Android(安卓)线性布局(LinearLayout)性能
  9. android > ProgressBar
  10. notification