Android ndk log unicode (wide characters)
Android ndk log unicode (wide characters)
我正在尝试写入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
但是,如果字节位于 char 数组中,__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);
您可以改为为每个字符打印十六进制值。
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]);
}
若要从十六进制值中获取编码字符,可以使用 Word - 4513[Alt-x]
Microsoft 将为您编码0x4513
。
相关文章:
- boost::spirit::xml::encode for wide string
- 如何解决"error reading characters of string"?
- 什么是指向 C 语言中'array of characters'的指针?
- Android ndk log unicode (wide characters)
- 尝试在C++中制作 ASCII 表,无法使"special characters"正确显示
- 根据概率生成"characters"
- C++ std::stringstream/ostringstream and UTF characters
- 文件名:"error reading characters of string"和"unable to read memory"