java - Android ndk log unicode(宽字符)

标签 java c++ unicode android-ndk logcat

我正在尝试写入 logcat unicode 字符(UTF16;宽字符,如日文、韩文或中文)。唯一成功的方法是将其作为字符串发送到 Java(例如下面的代码):

unsigned short* text = new unsigned short[100];      // or jchar*
.... // all some unicode to the array
jstring jtext = jniEnv->NewString(text, (jsize)length);
jniEnv->CallVoidMethod( JavaClass, JavaPrintUnicode, jtext );
... // Clean up

// Then java prints it out

但是如果字节是一个字符数组,__android_log_print 将打印乱码文本。有没有一种方法可以在 NDK (C++) 端打印出文本?

最佳答案

Android NDK,作为典型的 Linux,使用 32 位来表示宽字符,所以如果转换到 UTF-32 是微不足道的,你可以试试这个:

unsigned short text[100];
// fill text with UTF-16; make sure that all characters are 2 bytes long
long utf32[100];
for (int i=0; i<100; i++)
  utf32[i] = text[i];

__android_log_print(ANDROID_LOG_INFO, "UTF-32", "%ls", utf32);

关于java - Android ndk log unicode(宽字符),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27464835/

相关文章:

c++ - 转换 unicode 字符串,反之亦然

java - 在 JavaFX 中使用不同纹理创建立方体

java - JVM什么时候加载注解类

java - 尽管有 `when()` 方法,但它返回 null

java - 将字符串分成两部分,其中第一个仅包含数字的部分和其余部分?

c++ - libpcap 是否监视发送的数据包?

c++ - C++ 中的 char* vs std::string

c++ - GLSL : uniform buffer object example

c++ - 如何使用 unicode 文件名打开 std::fstream(ofstream 或 ifstream)?

php - 即使设置了 UTF-8 编码,在浏览器中显示俄文字母的问题