最近在美化一個java項目,修改後端寫的jsp頁面,遇到了編碼問題。包括類似這樣的:
<?xml version="1.0" encoding="GB2312"?>
<meta http-equiv="Content-Type" content="text/html;charset=gb2312">
username= new String(usrename.getBytes("iso-8859-1"),"GB2312");
<%@ page contentType="text/html;charset=GBK"%>
編碼的不一致導致我在新添加內容的時候一不小心就會出現jsp亂碼的情況,解決方法就是改需要改的頁面編碼爲utf-8即可,暫時沒有問題。
以下內容來自百度知道。
各個國家和地區所制定的不同 ANSI 編碼標準中,都只規定了各自語言所需的“字符”。比如:漢字標準(GB2312)中沒有規定韓國語字符怎樣存儲。這些 ANSI 編碼標準所規定的內容包含兩層含義:
- 使用哪些字符。也就是說哪些漢字,字母和符號會被收入標準中。所包含“字符”的集合就叫做“字符集”。
- 規定每個“字符”分別用一個字節還是多個字節存儲,用哪些字節來存儲,這個規定就叫做“編碼”。
各個國家和地區在制定編碼標準的時候,“字符的集合”和“編碼”一般都是同時制定的。因此,平常我們所說的“字符集”,比如: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 編碼”的特點: - 這些“ANSI 編碼標準”都只能處理各自語言範圍之內的 UNICODE 字符。
- “UNICODE 字符”與“轉換出來的字節”之間的關係是人爲規定的。
3、UTF-8,UTF-16,UnicodeBig
與“ANSI 編碼”類似的,把字符串通過 UNICODE 編碼轉化成“字節串”時,一個 UNICODE 字符可能轉化成一個字節或多個字節。
與“ANSI 編碼”不同的是: - 這些“UNICODE 編碼”能夠處理所有的 UNICODE 字符。
- “UNICODE 字符”與“轉換出來的字節”之間是可以通過計算得到的。