类型文件时出现乱码"/>
从共有“外部存储”获取txt类型文件时出现乱码
错误情形及对策
以下是从共有“外部存储”获取txt类型文件的部分代码:
public static String getStringFromPubExternalFiles(String filePath){BufferedInputStream bis = null;ByteArrayOutputStream baos = new ByteArrayOutputStream();File file0 = Environment.getExternalStoragePublicDirectory("");File file = new File(file0, "/"+filePath);try {bis = new BufferedInputStream(new FileInputStream(file));byte[] buffer = new byte[1024];int c = 0;while ((c = bis.read(buffer)) != -1) {baos.write(buffer, 0, c);baos.flush();}Log.d("公有外部存储获取字符串:", baos.toByteArray().toString());...return baos.toByteArray().toString();}
as中运行,Log.d()打出的字符是:
D/公有外部存储获取字符串:: [B@a55c068
而不是想要的字符串。
网上查询有许多解决办法,但大多是2014年左右的方法,感觉这个问题在现在好像已经不是问题。其解决方法大多和编码有关系,但较复杂。心想:如果在临转字符串时加上转码要求(utf-8),岂不简单些,于是就不断测试,最终发现将以上部分代码作如下修改:
...
Log.d("公有外部存储获取字符串:", baos.toString("utf-8"));...return baos.toString("utf-8");
就输出正常了:
D/公有外部存储获取字符串:: 我爱你塞北的雪
后来又发现即使去掉括号中的“utf-8”也会正常输出,即
return baos.toString();
错误、对策分析
baos是ByteArrayOutputStream 的对象,其方法:baos.toByteArray().toString()是有问题的。ByteArrayOutputStream是字节数组的缓冲,其中已有字节数组,再转换成字节数组(baos.toByteArray()),好像有点多余,所以baos直接转字符串:baos.toString(),也过。可能baos的toString()方法中默认的转码格式是utf-8,所以toString()方法中不加“utf-8”也能正常输出。
baos.toByteArray().toString()能运行通过,结果却是乱码,大概是ByteArrayOutputStream中的一个小bug吧。
更多推荐
从共有“外部存储”获取txt类型文件时出现乱码
发布评论