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

版权声明:本文出自胖喵~的博客,转载必须注明出处。

   转载请注明出处:http://www.cnblogs.com/by-dream/p/4580319.html

 

 

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

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

  好了不多说了,上源码吧

 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"

 

posted @ 2015-06-16 11:36  胖喵~  Views(1536)  Comments(1Edit  收藏  举报