开发者社区> 一叶飘舟> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

android开发 在adb shell下查询中文字符乱码及logcat中文乱码的问题

简介:
+关注继续查看
传说C使用ansi编码导致在adb shell下查询中文字符乱码? 求证 这个应该是运行环境问题吧
在 linux 下很正常(默认utf8编码)01.coldljy@linux:~/dev/sourcery> adb shell mkdir /data/测试
02.coldljy@linux:~/dev/sourcery> adb shell ls /data/
03.测试
04.tmp
05....
复制代码有空再到 windows 下试下  你说的是中文字符串吧
C语言的宽字符做的不是很好
char * str = "12434";
这个str存的什么字符内容,取决于这个文件的编码格式(没记错的话),你用gb2312编码的,里面就是gb2312的字符.
你这个gb2312的字符,在log里面直接打印,肯定会乱码的.


我在网上看了一下,貌似Android的__android_log_write的参数是char*么...现在问题就变得恶心了一点.可能涉及到编码问题.
理论上他的ndk log也支持多字符集的,你可能需要多尝试几次,看那一种特定的编码可以出来中文.
还有一种可能就是,直接就不知道其他字符集的,除了Latin1

我刚看了一下源码和文档

01.    public static int d(String tag, String msg) {

02.        return println(DEBUG, tag, msg);
03.    }
04.    public static native int println(int priority, String tag, String msg);

复制代码在来看这个println怎么实现的:

103 static jint android_util_Log_println(JNIEnv* env, jobject clazz,
104     jint priority, jstring tagObj, jstring msgObj)
105 {
106     const char* tag = NULL;
107     const char* msg = NULL;
108 
109     if (msgObj == NULL) {
110         jclass npeClazz;
111 
112         npeClazz = env->FindClass("java/lang/NullPointerException");
113         assert(npeClazz != NULL);
114 
115         env->ThrowNew(npeClazz, "println needs a message");
116         return -1;
117     }
118 
119     if (tagObj != NULL)
120         tag = env->GetStringUTFChars(tagObj, NULL);
121     msg = env->GetStringUTFChars(msgObj, NULL);
122 
123     int res = android_writeLog((android_LogPriority) priority, tag, msg);
124 
125     if (tag != NULL)
126         env->ReleaseStringUTFChars(tagObj, tag);
127     env->ReleaseStringUTFChars(msgObj, msg);
128 
129     return res;
130 }


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
linux一句话反弹shell
参考文献:https://www.anquanke.com/post/id/87017 实验环境: 阿里云服务器:120.xxx.xxx.xx(开启了8989端口) 内网ubuntu:192.xxx.xx.xxx(无外网ip不可直接访问) 安装netcat 默认的各个linux发行版本已经自带了netcat工具包,但是可能由于处于安全考虑原生版本的netcat带有可以直接发布与反弹本地shell的功能参数 -e这里都被阉割了,所以需要手动下载二进制安装包。
1506 0
【转】Linux Shell脚本调试技术
本文转载自:https://www.ibm.com/developerworks/cn/linux/l-cn-shell-debug/ Shell脚本调试技术 本文全面系统地介绍了shell脚本调试技术,包括使用echo, tee, trap等命令输出关键信息,跟踪变量的值,在脚本中植入调试钩子,使用“-n”选项进行shell脚本的语法检查, 使用“-x”选项实现shell脚本逐条语句的跟踪,巧妙地利用shell的内置变量增强“-x”选项的输出信息等。
1204 0
Linux之shell编程基础
一、变量     变量在shell中分为:本地变量、环境变量、位置参数;   本地变量:仅可在用户当前shell生命期的脚本中使用的变量,本地变量随着shell进程的消亡而无效,本地变量在新启动的shell中依旧无效,类似于c、c++中的局部变量的概念;   环境变量:适用于所有登录进程所产生...
748 0
Linux学习笔记(八)——简单shell语法
                编写Shell脚本的简单语法   提到编程,条件、分支、循环等语法肯定少不了。shell脚本编程亦是如此,下面只是结合最近学习的一些简单语法做的笔记,如有错误,欢迎指正。
907 0
+关注
1635
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载