關於使用java從http接口取數據保存到本地文件的中文亂碼處理
關於使用java從http接口取數據保存到本地文件的中文亂碼處理
要做到如下幾點:
1. 取接口數據,要注意加入編碼設置與接口文件本身的編碼設置一致,才能取得正確的數據
注意如下的: ins =new InputStreamReader(connection.getInputStream(),"GBK");
必須加入第二個編碼格式參數:參數的值與接口返回的數據的編碼格式一致
/**
* 從某個接口取返回數據內容
* @param url
* @return
*/
public static String fileGetContents(String strUrl) throws IOException {
URL url1 = null;
BufferedReader reader = null;
HttpURLConnection connection = null;
InputStreamReader ins = null ;
try {
url1 = new URL(strUrl);
connection = (HttpURLConnection) url1.openConnection();
connection.setConnectTimeout(2*1000);
connection.setReadTimeout(2*1000);
connection.connect();
ins =new InputStreamReader(connection.getInputStream(),"GBK");
reader = new BufferedReader(ins);
StringBuffer sb = new StringBuffer();
String line;
while ((line = reader.readLine()) != null) {
sb.append(line+ "\n");
}
return sb.toString();
} catch (IOException e) {
System.out.println("Error getURL:" + e);
System.out.println("Error getURL:" + strUrl);
}finally
{
if(ins != null)
{
try {
ins.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(reader != null)
{
try {
reader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(connection != null)
{
connection.disconnect();
}
}
return null;
}
2. 寫文件處理:
要注意寫入文件本身實際需要的編碼格式:
注意:OutputStreamWriter write = new OutputStreamWriter(new FileOutputStream(f),"GB2312"); 這句
public static void writeFile(String fileName, String fileContent)
{
try
{
File f = new File(fileName);
if (!f.exists())
{
f.createNewFile();
}
OutputStreamWriter write = new OutputStreamWriter(new FileOutputStream(f),"GB2312");
BufferedWriter writer=new BufferedWriter(write);
writer.write(fileContent);
writer.close();
} catch (Exception e)
{
e.printStackTrace();
}
}
3. 接口方編碼設置:
如接口為https://www.test.com/getdata.jsp
假設如下:
<%@ page language="java" contentType="text/html; charset=GB2312"
pageEncoding="GB2312">
總的來說就是各個地方都采用一致的編碼就可以避免討厭頭疼的中文編碼亂碼問題的發生。
最後更新:2017-04-04 07:03:23