Android NDK对于wchar_t和wcs的支持就是一堆屎.别想轻易使用UTF16编码.相比Win上的C++开发对于各种字符编码支持美若天堂,以前居然没发现.
强制wchar_t编译为2字节,wcs系函数不正确,还要自己实现.编译器难道就不能提示下不兼容或者什么的?
对于各种wcs系的printf的缺失,也为了各平台兼容(IOS上也是同样坑),所有字符串均改为char/std::string,全部UTF8编码,然后对于各种硬编码的中文字符,请保存源代码时选择(UTF-8 BOM)格式,再高效和兼容性上获取最大平衡点.
对于GCC等支持c++0x11的编译器,可以使用u8的前缀明确表明编译时把字符直接量用UTF8的格式存放.或者把源代码文件用UTF-8保存也可以.但VC2013仍然不支持UTF8的直接量,必须转码.费时费效率.
NDK的Make或者说是GUN的Make的一个子集是对格式严格要求或者说是不靠谱,对于任何潜在的空格,\t,\r,\n似乎都不能容忍.再编译完一个so后调试正确,然后再mk文件中的LOCAL_SRC_FILES加了一个注释,类似 \ #####这是一个注释 \,编译没有报任何错,运行使用这个so动态库的时候crash,如果不是事先已经调试完确认代码没有错误,估计找到天荒地老都不会发现这个错误,去除这个注释编译/链接,程序完美运行.
来源:oschina
链接:https://my.oschina.net/u/101343/blog/263981