各個國家和地區所制定的不同 ANSI 編碼標准中,都只規定了各自語言所需的“字符”。比如:漢字標准(GB2312)中沒有規定韓國語字符怎樣存儲。這些 ANSI 編碼標准所規定的內容包含兩層含義:
1. 使用哪些字符。也就是說哪些漢字,字母和符號會被收入標准中。所包含“字符”的集合就叫做“字符集”。
2. 規定每個“字符”分別用一個字節還是多個字節存儲,用哪些字節來存儲,這個規定就叫做“編碼”。
各個國家和地區在制定編碼標准的時候,“字符的集合”和“編碼”一般都是同時制定的。因此,平常我們所說的“字符集”,比如:GB2312, GBK, JIS 等,除了有“字符的集合”這層含義外,同時也包含了“編碼”的含義。
“UNICODE 字符集”包含了各種語言中使用到的所有“字符”。用來給 UNICODE 字符集編碼的標准有很多種,比如:UTF-8, UTF-7, UTF-16, UnicodeLittle, UnicodeBig 等。
1、ISO-8859-1:
最簡單的編碼規則,每一個字節直接作為一個 UNICODE 字符。比如,[0xD6, 0xD0] 這兩個字節,通過 iso-8859-1 轉化為字符串時,將直接得到 [0x00D6, 0x00D0] 兩個 UNICODE 字符,即 "ÖÐ"。
反之,將 UNICODE 字符串通過 iso-8859-1 轉化為字節串時,只能正常轉化 0~255 范圍的字符。
2、GB2312,BIG5,Shift_JIS,ISO-8859-2
把 UNICODE 字符串通過 ANSI 編碼轉化為“字節串”時,根據各自編碼的規定,一個 UNICODE 字符可能轉化成一個字節或多個字節。
反之,將字節串轉化成字符串時,也可能多個字節轉化成一個字符。比如,[0xD6, 0xD0] 這兩個字節,通過 GB2312 轉化為字符串時,將得到 [0x4E2D] 一個字符,即 '中' 字。
“ANSI 編碼”的特點:
1. 這些“ANSI 編碼標准”都只能處理各自語言范圍之內的 UNICODE 字符。
2. “UNICODE 字符”與“轉換出來的字節”之間的關系是人為規定的。
3、UTF-8,UTF-16,UnicodeBig
與“ANSI 編碼”類似的,把字符串通過 UNICODE 編碼轉化成“字節串”時,一個 UNICODE 字符可能轉化成一個字節或多個字節。
與“ANSI 編碼”不同的是:
1. 這些“UNICODE 編碼”能夠處理所有的 UNICODE 字符。
2. “UNICODE 字符”與“轉換出來的字節”之間是可以通過計算得到的。【以上內容百度理解,具體看代碼實現效果】
服務端 基於java Servlet后台
String result= "fial";
String username=request.getParameter("username");
String pwd=request.getParameter("password");
if(username.equals("admin")&&pwd.equals("123456")){
result="登入成功";
}
byte[] bytes = result.getBytes();
String str = new String(bytes, "iso-8859-1");
PrintWriter out=response.getWriter();
out.write(str);
Android 后台代碼
public String sendPost(String url, String params) {
String result="";
try {
URL realurl = new URL(url);
HttpURLConnection conn = (HttpURLConnection) realurl.openConnection();
conn.setDefaultRequestProperty("Content-Type", "text/html;charset=utf-8");
conn.setConnectTimeout(6000); // 設置超時時間
conn.setRequestMethod("POST");
DataOutputStream out = new DataOutputStream(conn.getOutputStream());
out.writeBytes(params);
out.flush();
out.close();
InputStream in = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in,"GB2312"));
String line = "";
while ((line = reader.readLine()) != null) {
// result=new String(line.getBytes("iso-8859-1"),"utf-8");
result=line;
}
} catch (MalformedURLException eio) {
result= eio.getMessage();
eio.printStackTrace();
} catch (IOException e) {
result=e.getMessage();
e.printStackTrace();
}
return result;
}