国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

java 中的亂碼問題匯總及解決方案

2019-11-26 13:36:57
字體:
供稿:網(wǎng)友

java中的亂碼問題

       最近做項目經(jīng)常會遇到Java中的亂碼問題,于是就抽時間整理下出現(xiàn)亂碼問題的情況和如何處理,這里做了一個整理,

分析

編碼與解碼

    編碼就是將字符轉(zhuǎn)為字節(jié),解碼就是就是將字節(jié)轉(zhuǎn)換為字符。

字節(jié)流與字符流

    對文件的讀寫操作都是通過字節(jié)流來實現(xiàn)的,即使JAVA中有字符流,但是其底層仍然使用的字節(jié)流。

亂碼問題出現(xiàn)

    java中使用最頻繁的是字符,當我們將文件讀入內(nèi)存并在控制臺顯示時(字節(jié)流--->字符流),就需要用到解碼。如果文件是UTF-8編碼,而我們解碼時錯用成GBK(如果不指定編碼,JAVA會采取系統(tǒng)默認編碼)來解碼,那么只能顯示亂碼。而我們寫文件時,最好指定編碼(UTF-8)。

解決方案

示例1 

   將字節(jié)流轉(zhuǎn)換為字符流時,我們指定編碼格式。這是我們文件也應該是gb2312編碼

public static String read(String filename) throws Exception {    InputStream is = new FileInputStream(filename);    BufferedReader in = new BufferedReader(new InputStreamReader(is,        "gb2312"));           //指定編碼格式    String s;    StringBuilder sb = new StringBuilder();    while ((s = in.readLine()) != null) {      sb.append(s + "/n");    }    in.close();    return sb.toString();}

示例2

  直接通過字節(jié)流讀入,使用String轉(zhuǎn)換為字符時,指定編碼。

package com.dy.xidian;import java.io.FileInputStream;import java.io.InputStream;class BufferedInputFile {  public static String read(String filename) throws Exception {    @SuppressWarnings("resource")    InputStream is = new FileInputStream(filename);    byte[] b = new byte[1024];    is.read(b);    return new String(b, "gb2312");  }}public class MemoryInput {  public static void main(String[] args) throws Exception {    String filename = "E:/html/gb2312.php";    String s = BufferedInputFile.read(filename);    System.out.println(s);  }}

 陷阱

   I/O操作中有個FileReader類,這個類隱藏了字節(jié)流轉(zhuǎn)為字符流的細節(jié),我們可以這樣使用。 BufferedReader in = new BufferedReader(new FileReader(filename)); 這樣,我們直接得到就是字符流了。但我們發(fā)現(xiàn),我們并沒有去設(shè)置編碼,這是因為FileReader中采用了默認編碼方式。這就變得很危險了,如果其默認的編碼格式和我們文件的編碼不同,那么讀出來的數(shù)據(jù)一定是亂碼。所以我們最好采用示例中的方式來進行流的轉(zhuǎn)換。

 感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 墨江| 原阳县| 武定县| 佛山市| 永兴县| 沿河| 永德县| 汾西县| 竹溪县| 抚顺县| 漳浦县| 千阳县| 综艺| 宽城| 黄石市| 延庆县| 浏阳市| 大洼县| 聂荣县| 新化县| 嘉定区| 阳西县| 元朗区| 许昌县| 丰顺县| 红河县| 罗江县| 阳春市| 项城市| 沂南县| 苏州市| 苍山县| 峨山| 昆山市| 利川市| 香河县| 铜陵市| 清原| 砚山县| 固始县| 乌兰浩特市|