传说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
03. }
04. public static native int println(int priority, String tag, String msg);
在 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 }