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

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
简介:
传说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 }


相关实践学习
阿里云百炼xAnalyticDB PostgreSQL构建AIGC应用
通过该实验体验在阿里云百炼中构建企业专属知识库构建及应用全流程。同时体验使用ADB-PG向量检索引擎提供专属安全存储,保障企业数据隐私安全。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
相关文章
|
3月前
|
Shell Linux 开发工具
"开发者的救星:揭秘如何用adb神器征服Android设备,开启高效调试之旅!"
【8月更文挑战第20天】Android Debug Bridge (adb) 是 Android 开发者必备工具,用于实现计算机与 Android 设备间通讯,执行调试及命令操作。adb 提供了丰富的命令行接口,覆盖从基础设备管理到复杂系统操作的需求。本文详细介绍 adb 的安装配置流程,并列举实用命令示例,包括设备连接管理、应用安装调试、文件系统访问等基础功能,以及端口转发、日志查看等高级技巧。此外,还提供了常见问题的故障排除指南,帮助开发者快速解决问题。掌握 adb 将极大提升 Android 开发效率,助力项目顺利推进。
90 0
|
6月前
|
Shell Android开发
ADB更改Android设备屏幕显示方向
ADB更改Android设备屏幕显示方向
351 5
|
6月前
|
Java Android开发
Android 对adb命令的拦截
Android 对adb命令的拦截
95 2
|
5月前
|
Shell 开发工具 Android开发
|
6月前
|
Shell Android开发
Android Activity重写dump方法实现通过adb调试代码
Android Activity重写dump方法实现通过adb调试代码
81 0
|
6月前
|
Shell Android开发
Android系统 adb shell push/pull 禁止特定文件
Android系统 adb shell push/pull 禁止特定文件
554 1
|
6月前
|
Android开发 Python
Python封装ADB获取Android设备wifi地址的方法
Python封装ADB获取Android设备wifi地址的方法
153 0
|
开发工具 Android开发
Mac 安卓(Android) 配置adb路径
Mac 安卓(Android) 配置adb路径
845 0
|
6月前
|
存储 安全 Shell
Android系统 adb shell auth授权使用
Android系统 adb shell auth授权使用
475 2
|
6月前
|
网络协议 Shell Android开发
Android 深入学习ADB调试原理(1)
Android 深入学习ADB调试原理(1)
271 1