zoukankan      html  css  js  c++  java
  • 【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 + "
    ");
    11             os.writeBytes("exit
    ");
    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"
  • 相关阅读:
    Base-64 字符数组或字符串的长度无效
    vs2015web项目无法加载64位c++的dll,提示试图加载不正确的格式
    解决json显示日期带T的问题
    light7的picker无法控制选择数值范围的解决办法
    sqlserver中获取本周记录
    js日期格式化,兼容ie
    ASP 缓存处理及URL 重写
    SQL Server2008附加数据库之后显示为只读时解决方法
    SQL 2008升级SQL 2008 R2完全教程或者10.00.1600升级10.50.1600
    xamarin 学习
  • 原文地址:https://www.cnblogs.com/by-dream/p/4580319.html
Copyright © 2011-2022 走看看