从共有“外部存储”获取txt类型文件时出现乱码

编程入门 行业动态 更新时间:2024-10-28 06:22:54

从共有“外部存储”获取txt<a href=https://www.elefans.com/category/jswz/34/1771355.html style=类型文件时出现乱码"/>

从共有“外部存储”获取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类型文件时出现乱码

本文发布于:2024-02-07 09:43:12,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1755986.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:类型   出现乱码   文件   txt

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!