1 編碼簡介 1.1 ASCII/ISO-8859-1/Latin_1 單字節(jié)編碼,可以表示256個(gè)不同的字符(英文字符,、標(biāo)點(diǎn)符號(hào)等),。 1.2 GB2312/GBK 雙字節(jié)編碼(不定長,英文時(shí)只用一個(gè)字節(jié)),,兼容ISO-8859-1編碼,,即當(dāng)其為ISO-8859-1時(shí),只需用一個(gè)字節(jié)來表示,,并且其值完全一樣,。GB2312只能表示簡體字,GBK可以同時(shí)表示繁體字和簡體字,,并且兼容GB2312,。 1.3 Unicode 定長雙字節(jié)編碼,不兼容任何編碼,,但可通過轉(zhuǎn)換,,表示任何編碼。Java內(nèi)部使用Unicode來進(jìn)行操作,。不過Unicode容易占用更多的空間,,因?yàn)閷τ谟⑽淖帜福琔nicode也需要兩個(gè)字節(jié)來表示,。 1.4 UTF(UCS Transformation Format) 不定長編碼,,每一個(gè)字符的長度從1-6個(gè)字節(jié)不等,一般來講,,英文字母都是用一個(gè)字節(jié)表示,,而漢字使用三個(gè)字節(jié)。其實(shí)UTF就是Unicode編碼的傳輸和存儲(chǔ)的格式,。 2 Java對字符的處理 2.1 getBytes(charset) 將字符串所表示的字符按照charset編碼,,并以字節(jié)方式表示。注意字符串在java內(nèi)存中總是按unicode編碼存儲(chǔ)的,。比如"中文",,存儲(chǔ)為"4e2d 6587",如果charset為"gbk",,則被編碼為"d6d0 cec4",,然后返回字節(jié)"d6 d0 ce c4",。如果charset為"utf8"則最后是"e4 b8 ad e6 96 87",。如果是"iso8859-1",,則由于無法編碼,最后返回 "3f 3f"(兩個(gè)問號(hào)),。(應(yīng)先考慮字符串所表示的字符編碼,,然后確定需轉(zhuǎn)換的編碼與現(xiàn)在字符串的編碼是否兼容) 2.2 new String(charset) 將字節(jié)數(shù)組按照charset編碼進(jìn)行組合識(shí)別,最后轉(zhuǎn)換為unicode存儲(chǔ),。就是按照不同的編碼,,取不同的字節(jié)數(shù),然后轉(zhuǎn)換成unicode,。 3 Java中各類型操作的字符處理
3.1 各類型處理
3.2 文件讀寫 外部數(shù)據(jù)如文件經(jīng)過讀寫和轉(zhuǎn)換兩個(gè)步驟,,轉(zhuǎn)為jvm所使用字符。 1. InputStream/OutputStream用于讀寫原始外部數(shù)據(jù),,Reader/Writer執(zhí)行讀寫和轉(zhuǎn)換兩個(gè)步驟,,處理漢字不合適,應(yīng)該首選使用Reader/Writer,。 2. FileReader/FileWriter使用JVM當(dāng)前編碼讀寫文件.如果有其它編碼格式,使用InputStreamReader/OutputStreamWriter 3. PrintStream有點(diǎn)特殊,,它自動(dòng)使用jvm缺省編碼進(jìn)行轉(zhuǎn)換。 3.3 讀取.properties文件 .propeties文件由Properties類以iso8859-1編碼讀取,,因此不能在其中直接寫漢字,。 1. 使用JDK 的native2ascii工具轉(zhuǎn)換漢字為\uXXXX格式。命令行:native2ascii –encoding GBK inputfile outputfile 2. 對讀入的字符串進(jìn)行轉(zhuǎn)換:byte[] b = str.getBytest(“ISO-8859-1”); str = new String(b,”GBK”); 3.4 讀取XML文件 XML文件讀寫同于文件讀寫,,但應(yīng)注意確保XML頭中聲明如<? xml version=”1.0” encoding=”gb2312”?>與文件編碼保持一致,。 3.5 WEB/Servlet/JSP 1. 對于JSP,確定頭部加上 <%@ page contentType="text/html;charset=gbk"%>這樣的標(biāo)簽,。 2. 對于Servlet,,確定 設(shè)置setContentType (“text/html; charset=gbk”),以上兩條用于使得輸出漢字沒有問題,。 3. 為輸出HTML head中加一個(gè) <meta http-equiv="Content-Type" content="text/html; charset=gbk"> ,,讓瀏覽器正確確定HTML編碼。 4. 為Web應(yīng)用加一個(gè)Filter,,確保每個(gè)Request明確調(diào)用setCharacterEncoding方法,讓輸入漢字能夠正確解析,。 |
|