java byte 编码_java字节编码总结
1 編碼簡介
1.1 ASCII/ISO-8859-1/Latin_1
單字節編碼,可以表示256個不同的字符(英文字符、標點符號等)。
1.2 GB2312/GBK
雙字節編碼(不定長,英文時只用一個字節),兼容ISO-8859-1編碼,即當其為ISO-8859-1時,只需用一個字節來表示,并且其值完全一樣。GB2312只能表示簡體字,GBK可以同時表示繁體字和簡體字,并且兼容GB2312。
1.3 Unicode
定長雙字節編碼,不兼容任何編碼,但可通過轉換,表示任何編碼。Java內部使用Unicode來進行操作。不過Unicode容易占用更多的空間,因為對于英文字母,Unicode也需要兩個字節來表示。
1.4 UTF(UCS Transformation Format)
不定長編碼,每一個字符的長度從1-6個字節不等,一般來講,英文字母都是用一個字節表示,而漢字使用三個字節。其實UTF就是Unicode編碼的傳輸和存儲的格式。
2 Java對字符的處理
2.1 getBytes(charset)
將字符串所表示的字符按照charset編碼,并以字節方式表示。注意字符串在java內存中總是按unicode編碼存儲的。比如"中文",存儲為"4e2d 6587",如果charset為"gbk",則被編碼為"d6d0 cec4",然后返回字節"d6 d0 ce c4"。如果charset為"utf8"則最后是"e4 b8 ad e6 96 87"。如果是"iso8859-1",則由于無法編碼,最后返回 "3f 3f"(兩個問號)。(應先考慮字符串所表示的字符編碼,然后確定需轉換的編碼與現在字符串的編碼是否兼容)
2.2 new String(charset)
將字節數組按照charset編碼進行組合識別,最后轉換為unicode存儲。就是按照不同的編碼,取不同的字節數,然后轉換成unicode。
3 Java中各類型操作的字符處理
3.1 各類型處理
3.2 文件讀寫
外部數據如文件經過讀寫和轉換兩個步驟,轉為jvm所使用字符。
1. InputStream/OutputStream用于讀寫原始外部數據,Reader/Writer執行讀寫和轉換兩個步驟,處理漢字不合適,應該首選使用Reader/Writer。
2. FileReader/FileWriter使用JVM當前編碼讀寫文件.如果有其它編碼格式,使用InputStreamReader/OutputStreamWriter
3. PrintStream有點特殊,它自動使用jvm缺省編碼進行轉換。
3.3 讀取.properties文件
.propeties文件由Properties類以iso8859-1編碼讀取,因此不能在其中直接寫漢字。
1. 使用JDK 的native2ascii工具轉換漢字為\uXXXX格式。命令行:native2ascii –encoding GBK inputfile outputfile
2. 對讀入的字符串進行轉換:byte[] b = str.getBytest(“ISO-8859-1”); str = new String(b,”GBK”);
3.4 讀取XML文件
XML文件讀寫同于文件讀寫,但應注意確保XML頭中聲明如 xml version=”1.0” encoding=”gb2312”?>與文件編碼保持一致。
3.5 WEB/Servlet/JSP
1. 對于JSP,確定頭部加上 這樣的標簽。
2. 對于Servlet,確定 設置setContentType (“text/html; charset=gbk”),以上兩條用于使得輸出漢字沒有問題。
3. 為輸出HTML head中加一個 ,讓瀏覽器正確確定HTML編碼。
4. 為Web應用加一個Filter,確保每個Request明確調用setCharacterEncoding方法,讓輸入漢字能夠正確解析。
總結
以上是生活随笔為你收集整理的java byte 编码_java字节编码总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python图书管理实训报告总结_图书管
- 下一篇: 台式计算机前面插耳机没声音,Win10台