大多数时候我在Android上使用UTF-8,但我最近也在测试wchar_t
。
我知道wchar_t
在早期是可怕的,但我不在乎太旧的设备,所以认为现在与wchar_t
合作会很好。
经过测试:
物理设备:三星Galaxy Note2(4.4.2),Galaxy S7 Edge(7.0)
软件模拟器:HTC One(4.3),Samsung Galaxy S6(5.0,6.0),S8(7.0),Google Pixel C(7.1.0)
在我的简单测试中,wcslen()
,wcscpy()
,wcscat()
按预期工作,
但是swprintf()
在 HTC One (4.3)和 Note2 (4.4.2)上没有做任何事情。
我无法测试那里的所有设备,但我的结论是swprintf()
只是不能在Android Kitkat及以下版本上运行。它可能只是无所事事。
请问有人证实我的理论吗?有没有解决方法呢?
无论是否实用,我只是想知道。
答案 0 :(得分:2)
不要问我为什么,但是直到L Android只有vswprintf
的存根实现才返回-1。
https://android.googlesource.com/platform/bionic/+/kitkat-release/libc/bionic/wchar.cpp#74
解决方法是使用libandroid_support。如果你使用的是libc ++,这是自动的(这是NDK r16 +的最佳选择)。