【问题标题】:Standard C strings in android NDKandroid NDK 中的标准 C 字符串
【发布时间】:2013-08-17 04:07:50
【问题描述】:

有谁知道android NDK中默认的c-string编码是什么?

OS X 和 iOS 即使用 UTF-8 字符串,Windows 使用 ANSI 字符串。安卓呢?

【问题讨论】:

    标签: android c string encoding android-ndk


    【解决方案1】:

    NDK 是一种编码无知。它的 C 字符串不能直接显示。但是如果你使用JNI将这些字符串传递给Java应用层,你应该将它们准备为Modified UTF-8

    【讨论】:

    • 其实我的意思有点不同。 strcpy、strlen 等函数接受哪些编码?这取决于平台。正如我在问题“OS X 和 iOS 即使用 UTF-8 字符串,Windows 使用 ANSI 字符串”中提到的,但是 android 呢?
    • C 字符串通常是编码无关的,即它们被定义为包含字符(8 位有符号或无符号)数组的数据结构,尾部带有 '\0'。在某些系统中,可能有 API 可以使用这些字符串进行显示,但在 Android 上,这只能通过 JNI 进行。
    • 嗯,一种特殊情况是函数open()fopen()。它们与底层 Linux 文件系统通信,因此使用未经修改的 UTF-8 编码。
    • 我确切地知道 UTF-8 是什么。这不是我的问题。让我们再次澄清一下。在 Windows 上 strlen 不能与 UTF-8 一起使用,只能与 ANSI 一起使用。在 OS X 上 strlen 使用 UTF-8 字符串。 android 上的 strlen 呢?
    • 不,strlen() 与语言环境和编码无关。它总是返回足以容纳给定字符串字符串的字节数,不包括终止零。存在 Microsoft 扩展,例如strlen_l(),但要发现字符串"\xd0\xb6\xd0\xbe\xd0\xbf\xd0\xb0" 中的实际字符数实际上是4 个字符,则需要mbcslen()mbstowcs(NULL,s,0)。请参阅stackoverflow.com/questions/5117393/… 进行讨论。
    猜你喜欢
    • 1970-01-01
    • 2012-01-26
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-02
    • 2016-05-01
    相关资源
    最近更新 更多