【发布时间】:2013-08-17 04:07:50
【问题描述】:
有谁知道android NDK中默认的c-string编码是什么?
OS X 和 iOS 即使用 UTF-8 字符串,Windows 使用 ANSI 字符串。安卓呢?
【问题讨论】:
标签: android c string encoding android-ndk
有谁知道android NDK中默认的c-string编码是什么?
OS X 和 iOS 即使用 UTF-8 字符串,Windows 使用 ANSI 字符串。安卓呢?
【问题讨论】:
标签: android c string encoding android-ndk
NDK 是一种编码无知。它的 C 字符串不能直接显示。但是如果你使用JNI将这些字符串传递给Java应用层,你应该将它们准备为Modified UTF-8。
【讨论】:
'\0'。在某些系统中,可能有 API 可以使用这些字符串进行显示,但在 Android 上,这只能通过 JNI 进行。
open() 和fopen()。它们与底层 Linux 文件系统通信,因此使用未经修改的 UTF-8 编码。
strlen() 与语言环境和编码无关。它总是返回足以容纳给定字符串字符串的字节数,不包括终止零。存在 Microsoft 扩展,例如strlen_l(),但要发现字符串"\xd0\xb6\xd0\xbe\xd0\xbf\xd0\xb0" 中的实际字符数实际上是4 个字符,则需要mbcslen() 或mbstowcs(NULL,s,0)。请参阅stackoverflow.com/questions/5117393/… 进行讨论。