论坛首页 移动开发技术论坛

android中文乱码解决大全

浏览 7832 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-12-26  
最近在做个MP3播放器,出现中文乱码问题,在网上找了很多解决办法,我整理了出现乱码的点和解决方案,拿出来和大家共享一下

1.读取中文文件乱码解决方法
package com.apj.conv;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.widget.TextView;

public class ConverActivity extends Activity {
	
	private TextView textview ;
	
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        textview = (TextView) findViewById(R.id.lrctext);
        
      
		System.out.println("===================convertCodeAndGetText begin=================== ");
	    ///获得SDCard中文件的路径
		String path = Environment.getExternalStorageDirectory().getAbsolutePath()+ File.separator ;
	    String tochinese = convertCodeAndGetText(path+"a.txt");
		System.out.println(tochinese);
		System.out.println("===================cconvertCodeAndGetText end===================");
        textview.setText(tochinese);
        
    }
   
	public String convertCodeAndGetText(String str_filepath) {// ת��

		File file = new File(str_filepath);
		BufferedReader reader;
		String text = "";
		try {
		    
			FileInputStream fis = new FileInputStream(file);
			BufferedInputStream in = new BufferedInputStream(fis);
			in.mark(4);
			byte[] first3bytes = new byte[3];
			in.read(first3bytes);
			in.reset();
			if (first3bytes[0] == (byte) 0xEF && first3bytes[1] == (byte) 0xBB
					&& first3bytes[2] == (byte) 0xBF) {// utf-8

				reader = new BufferedReader(new InputStreamReader(in, "utf-8"));

			} else if (first3bytes[0] == (byte) 0xFF
					&& first3bytes[1] == (byte) 0xFE) {

				reader = new BufferedReader(
						new InputStreamReader(in, "unicode"));
			} else if (first3bytes[0] == (byte) 0xFE
					&& first3bytes[1] == (byte) 0xFF) {

				reader = new BufferedReader(new InputStreamReader(in,
						"utf-16be"));
			} else if (first3bytes[0] == (byte) 0xFF
					&& first3bytes[1] == (byte) 0xFF) {

				reader = new BufferedReader(new InputStreamReader(in,
						"utf-16le"));
			} else {

				reader = new BufferedReader(new InputStreamReader(in, "GBK"));
			}
			String str = reader.readLine();

			while (str != null) {
				text = text + str + "\n";
				str = reader.readLine();

			}
			reader.close();

		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return text;
	}

}


2. 连接网络读取文件内容中文乱码解决办法
URL myFileUrl = null;   
   myFileUrl = new URL(url);
   HttpURLConnection conn;
   conn = (HttpURLConnection) myFileUrl.openConnection();
   conn.setDoInput(true);
   conn.connect();
   InputStream is = conn.getInputStream();
   BufferedReader br = new BufferedReader(new InputStreamReader(is,
     "GB2312"));
   sb = new StringBuffer();
   String data = "";
   while ((data = br.readLine()) != null) {   
        sb.append(data+"\n");   
   }   
   String result = sb.toString();


3.读取网络文件中文名下载乱码解决办法
1.先在设置服务器编码:找到Tomcat安装目录下的server.xml文件(Tomcat 6.0\conf\server.xml)。设置编码为UTF-8

<Connectorport="8080" URIEncoding="UTF-8" redirectPort="8443" connectionTimeout="20000" protocol="HTTP/1.1"/>

2. android 中代码为:
		try {
			 lrcUrl = "http://192.168.0.214/vote/mp3/" + URLEncoder.encode("中文.mp3","UTF-8");
			} catch (UnsupportedEncodingException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

			int result1 = downFile(lrcUrl, "mp3/", "中文.mp3");
/**
	 * 该函数返回整型( -1:代表下载文件出错 ;0:代表下载成功;1:代表文件已存在)
	 **/
	public int downFile(String urlStr, String path, String fileName) {
		InputStream inputStream = null;
		try {
			FileUtils fileUtils = new FileUtils();
			if (fileUtils.isFileExist( fileName,path )) {
				return 1;
			} else {
				inputStream = getInputStreamFromUrl(urlStr);
				File resultFile = fileUtils.write2SDFromInput(path, fileName,
						inputStream);
				if (resultFile == null) {
					return -1;
				}

			}
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			return -1;
		} finally {
			try {
				inputStream.close();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
		return 0;
	}

	/**
	 * 根据URL得到输入流
	 * 
	 * @param urlStr
	 * @return
	 * @throws MalformedURLException
	 * @throws IOException
	 */

	public InputStream getInputStreamFromUrl(String urlStr)
			throws MalformedURLException, IOException {
		url = new URL(urlStr);
		HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
		InputStream inputStream = urlConn.getInputStream();
		return inputStream;
	}

   发表时间:2011-12-26   最后修改:2011-12-26
不错啊,好东西







0 请登录后投票
   发表时间:2011-12-27  
好东西,感谢楼主分享!
0 请登录后投票
   发表时间:2011-12-29  
感谢楼主分享 谢谢
0 请登录后投票
   发表时间:2011-12-30  
感谢分享。楼主写的不错啊
0 请登录后投票
论坛首页 移动开发技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics