Android 字符乱码问题的处理

Android 网络HTML查看器》一文中,运行代码实践一下

发现html源代码中出现了乱码,原因很明显:charset="gb2312"

android默认的字符集是"utf-8"

public class StreamTools {
    /**
     * 把输入流的内容转化成字符串
     *
     * @param is
     * @return
     */
    public static String readInputStream(InputStream is) {
        try {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            int len = 0;
            byte[] buffer = new byte[1024];
            while ((len = is.read(buffer)) != -1) {
                baos.write(buffer, 0, len);
            }
            is.close();
            baos.close();
            byte[] result = baos.toByteArray();
            return new String(result);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }

    }

}

将上面标记的一行代码修改为:

return new String(result, "gb2312");

运行后的效果如下

但是这样修改后,不够智能,如果遇到utf-8的编码,又会出现乱码。继续修改代码如下:

package com.wuyudong.htmlviewer.utils;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;

public class StreamTools {
    /**
     * 把输入流的内容转化成字符串
     *
     * @param is
     * @return
     */
    public static String readInputStream(InputStream is) {
        try {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            int len = 0;
            byte[] buffer = new byte[1024];
            while ((len = is.read(buffer)) != -1) {
                baos.write(buffer, 0, len);
            }
            is.close();
            baos.close();
            byte[] result = baos.toByteArray();

            String str = new String(result);
            // 试着解析result里面的字符串
            if (str.contains("gb2312")) {
                return new String(result, "gb2312");
            } else if(str.contains("utf-8")){
                return str;
            } else {
                return null;
            }

            //return new String(result, "gb2312");
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }

    }

}
时间: 2024-10-01 23:11:23

Android 字符乱码问题的处理的相关文章

学习笔记_过滤器应用案例(解决全站字符乱码)

解决全站字符乱码(POST和GET中文编码问题) servlet: l  POST:request.setCharacterEncoding(“utf-8”); l  GET: String username = request.getParameter(“username”); username = new String(username.getBytes(“ISO-8859-1”), “utf-8”); 1 说明 乱码问题: l  获取请求参数中的乱码问题: POST请求:request.s

CSocket编程中字符乱码问题

*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* BLOCKS =============================================================================*/ p, blockquote, ul, ol, dl, table, pre { margin: 15px 0; } /* HEAD

Oracle字符乱码、数据越界訪问典型Bug分析

前言: 作为乙方,在甲方客户那里验收阶段发现两个诡异Bug. 下面就问题来源.问题根因.解决方式.怎样避免做具体描写叙述. 一.Bug1:Oracle读写字符乱码. 1.问题来源 Oracle数据库监听http://blog.csdn.net/laoyang360/article/details/46524519 须要获取最新插入的中文类别字符.以判定分类.单步调试发现每次接收到的都是乱码. 2.问题根因 编码格式不一致导致. 3.解决方式 第一步:查看oracle自身的编码格式,能够通过命令s

Oracle字符乱码、数据越界访问典型Bug分析

前言: 作为乙方,在甲方客户那里验收阶段发现两个诡异Bug.以下就问题来源.问题根因.解决方案.如何避免做详细描述. 一.Bug1:Oracle读写字符乱码. 1.问题来源 Oracle数据库监听http://blog.csdn.net/laoyang360/article/details/46524519 需要获取最新插入的中文类别字符,以判定分类.单步调试发现每次接收到的都是乱码. 2.问题根因 编码格式不一致导致. 3.解决方案 第一步:查看oracle自身的编码格式,可以通过命令sele

windows自带记事本导致文本文件(UTF-8编码)开头三个字符乱码问题

在windows平台下,使用系统的记事本以UTF-8编码格式存储了一个文本文件,但是由于Microsoft开发记事本的团队使用了一个非常怪异的行为来保存UTF-8编码的文件,它们自作聪明地在每个文件开头添加了0xefbbbf(十六进制)的字符,所以我们就会遇到很多不可思议的问题,比如,网页第一行可能会显示一个"?",明明正确的程序一编译就报出语法错误,等等. 下面为一段测试程序,由记事本编辑的文本文件导致文件开头前三个字符乱码. #include <stdio.h> #de

Android中文乱码彻底解决

以下是我研究的成果,希望对您有帮助: Java代码   sb = new StringBuffer(); HttpEntity entity = response.getEntity(); InputStream is = entity.getContent(); BufferedReader br = new BufferedReader( new InputStreamReader(is,"GB2312")); String data = ""; while (

mysql字符乱码

解决mysql字符乱码思路: mysql服务器字符集 mysql客户端字符集 系统字符集 生产环境改字符集: 1.导出表结构到 scam.sql文件中 2.更改scam.sql文件中的字符集为想要的字符集 3.导出所有的数据到all.sql中,更改all.sql中的 set names xx  改为你要的字符集 4.删除原库 5.创建库(你要的字符集的) 6.导入表结构 7.导入数据 查看字符集:(要保持多一致) 查看系统字符集: [[email protected] ~]# cat /etc/

mysql中采用concat来拼接中文字符乱码解决方式(转)

mysql中采用concat来拼接中文字符乱码解决方式 - fuxuejun的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/fuxuejun/article/details/6284725 mysql concat乱码问题解决 concat(str1,str2) 当concat结果集出现乱码时,大都是由于连接的字段类型不同导致,如concat中的字段参数一个是varchar类型,一个是int类型或doule类型,就会出现乱码. 解决方法:利用mysql的字符

Keil uVision4 代码编辑器中文字符乱码问题

MDK-ARM 使用中一直有个很纠结的问题,中文字符支持不好. 比如写代码注释,使用中文删除字符就会只删除一半问题.复制粘贴代码中间有中文就会出现乱码问题. 想过换IAR,新学个IDE也麻烦,上面的问题也不很大稍微绕一下也能解决,所以一直没换. 发现其实这个根本不是问题,安装好后默认是ANSI编码,所以会出现上述问题.只要把编码改成UTF-8编码就能解决上述烦恼. 设置步骤:     1.选择菜单:[Edit]->[Configuration]       2.页签[Editor]中 Gener