首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android日志unicode (宽字符)

问Android日志unicode (宽字符)
EN

Stack Overflow用户
提问于 2014-12-13 23:42:10
回答 2查看 2.5K关注 0票数 1

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

代码语言:javascript
复制
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

但是,如果字节位于char数组中,__android_log_print将打印乱码文本。是否有方法打印出NDK (C++)侧的文本?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-14 09:39:23

Android NDK在Linux中是典型的,它使用32位来表示宽字符,所以如果转换到UTF-32非常简单,您可以尝试这样做:

代码语言:javascript
复制
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);
票数 4
EN

Stack Overflow用户

发布于 2014-12-14 00:07:51

您可以为每个字符打印十六进制值。

代码语言:javascript
复制
void print_string_as_hex(WCHAR* ws){
    int l = wcslen(ws);
    for(int i = 0 ; i < l ; i++) 
        __android_log_print(ANDROID_LOG_INFO, "MyTag", "%x", ws[i]);
}

要从十六进制值中获取编码字符,可以使用Microsoft 4513[Alt-x]为您编码0x4513。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27464835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档