码迷,mamicode.com
首页 > 移动开发 > 详细

【Android测试】【随笔】在手机里用命令行创建中文文件夹

时间:2015-06-16 12:40:26      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:

  不知道为啥当时自己写了一段在手机里用命令行创建文件的代码,后来由于需求,新建的文件夹需要用中文表示,因为直观,然后就发现出现诡异的乱码。

技术分享

  尝试了各种的编码格式,最后终于成功了,上图就是各种编码格式出的岔子,第一个为正确的。

  好了不多说了,上源码吧

 1     public void ShellONECommand(String cmd)
 2     {        
 3         ((MainActivity)mainContext).ThreadUpdateLogToUI( "RunShell: " + cmd, CommonVar.LOG_SHOW);
 4         
 5         try
 6         {
 7             Process process = Runtime.getRuntime().exec("su");
 8             DataOutputStream os = new DataOutputStream(process.getOutputStream());
 9             cmd = new String(cmd.getBytes(), "ISO-8859-1");
10             os.writeBytes(cmd + "\n");
11             os.writeBytes("exit\n");
12             os.flush();
13             os.close();
14             process.waitFor();
15         } catch (Exception e)
16         {
17             e.getStackTrace();
18         }
19     }

  上面的代码在使用时候是这样用的:

ShellONECommand("mkdir -p /storage/emulated/0/中文文件夹");

  其实上面的代码最关键的部分在于 第9行:

cmd = new String(cmd.getBytes(), "ISO-8859-1");

  首先将cmd转化为byte,然后转化为 ISO-8859-1 的编码格式。

 

  其实难点就在于,如果确定是这种编码格式呢?因为之前我觉得Android手机中只会存在utf-8 和 gb2312的编码格式,但是居然出了这么一个奇葩的编码格式。

  那以后遇到这样的怎么办呢?那只能一个一个的尝试了,所以列一下常用的编码格式:

 /** 7位ASCII字符,也叫作ISO646-US、Unicode字符集的基本拉丁块 */
 "US-ASCII";

 /** ISO 拉丁字母表 No.1,也叫作 ISO-LATIN-1 */
 "ISO-8859-1";

 /** 8 位 UCS 转换格式 */
 "UTF-8";

 /** 16 位 UCS 转换格式,Big Endian(最低地址存放高位字节)字节顺序 */
 "UTF-16BE";

 /** 16 位 UCS 转换格式,Little-endian(最高地址存放低位字节)字节顺序 */
 "UTF-16LE";

 /** 16 位 UCS 转换格式,字节顺序由可选的字节顺序标记来标识 */
 "UTF-16";

 /** 中文超大字符集 */
 "GBK"

 

【Android测试】【随笔】在手机里用命令行创建中文文件夹

标签:

原文地址:http://www.cnblogs.com/by-dream/p/4580319.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!