您的位置:首页 > 移动开发 > Android开发

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

2015-06-16 11:36 351 查看
版权声明:本文出自carter_dream的博客,转载必须注明出处。

转载请注明出处:/article/5247326.html

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



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

  好了不多说了,上源码吧

public void ShellONECommand(String cmd)
{
((MainActivity)mainContext).ThreadUpdateLogToUI( "RunShell: " + cmd, CommonVar.LOG_SHOW);

try
{
Process process = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(process.getOutputStream());
cmd = new String(cmd.getBytes(), "ISO-8859-1");
os.writeBytes(cmd + "\n");
os.writeBytes("exit\n");
os.flush();
os.close();
process.waitFor();
} catch (Exception e)
{
e.getStackTrace();
}
}


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

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"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: