最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2016年11月04日 15:58:40   投稿:lqh  
這篇文章主要介紹了java 中的亂碼問題匯總相關(guān)資料,并附解決方案,出現(xiàn)亂碼問題有編碼與解碼,字節(jié)流與字符流出現(xiàn)亂碼,等其他情況,需要的朋友可以參考下

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)換為字符流時,我們指定編碼格式。這是我們文件也應(yīng)該是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)換。

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

相關(guān)文章

  • Spring MVC 接口 ResponseBodyAdvice 及其應(yīng)用最佳實踐記錄

    Spring MVC 接口 ResponseBodyAdvice 及其應(yīng)用最佳實

    ResponseBodyAdvice?是 Spring MVC 提供的一個強大接口,允許你在響應(yīng)體被寫入 HTTP 響應(yīng)之前對其進行全局處理,下面我將全面介紹它的工作原理、使用場景和最佳實踐,感興趣的朋友一起看看吧
    2025-04-04
  • Jenkins安裝以及郵件配置詳解

    Jenkins安裝以及郵件配置詳解

    這篇文章主要介紹了Jenkins安裝以及郵件配置相關(guān)問題,并通過圖文給大家做了詳細講解步驟,需要的朋友參考下吧。
    2017-12-12
  • JAVA實現(xiàn)異步調(diào)用實例代碼

    JAVA實現(xiàn)異步調(diào)用實例代碼

    在java平臺,實現(xiàn)異步調(diào)用的角色主要三種角色:調(diào)用者、取貨憑證、真實數(shù)據(jù)。本篇文章給大家介紹java實現(xiàn)異步調(diào)用實例代碼,需要的朋友可以參考下
    2015-09-09
  • Java 開發(fā)的幾個注意點總結(jié)

    Java 開發(fā)的幾個注意點總結(jié)

    這篇文章主要介紹了Java開發(fā)的幾個注意點的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • 深度對比與解析SpringBoot中的application.properties與application.yml

    深度對比與解析SpringBoot中的application.properties與application.yml

    在Springboot項目中,使用.properties和.yml配置是等效的,均可以正常識別并使用,本文將為大家深入對比與解析一下二者的使用與區(qū)別,希望對大家有一定的幫助
    2025-04-04
  • Java經(jīng)典面試題匯總:Mybatis

    Java經(jīng)典面試題匯總:Mybatis

    本篇總結(jié)的是Mybatis框架相關(guān)的面試題,后續(xù)會持續(xù)更新,希望我的分享可以幫助到正在備戰(zhàn)面試的實習生或者已經(jīng)工作的同行,如果發(fā)現(xiàn)錯誤還望大家多多包涵,不吝賜教,謝謝
    2021-07-07
  • Spring中如何使用Comparator接口

    Spring中如何使用Comparator接口

    Comparator比較器接口可以將自身傳遞給排序方法(比如Collections.sort或Arrays.sort),以便對排序順序進行精確控制。本文講述Spring中如何使用Comparator接口
    2021-06-06
  • Java解決浮點數(shù)計算不精確問題的方法詳解

    Java解決浮點數(shù)計算不精確問題的方法詳解

    在 Java 中,浮點數(shù)計算不精確問題指的是使用浮點數(shù)進行運算時,由于浮點數(shù)的內(nèi)部表示方式和十進制數(shù)的表示方式存在差異,導致計算結(jié)果可能出現(xiàn)誤差,本文就給大家介紹一下Java如何解決浮點數(shù)計算不精確問題,需要的朋友可以參考下
    2023-09-09
  • Java foreach循環(huán)的使用方法詳解

    Java foreach循環(huán)的使用方法詳解

    Java SE5引入了一種更加簡潔的for語法用于數(shù)組和容器,即foreach語法,表示不必創(chuàng)建int變量去對由訪問項構(gòu)成的序列進行計數(shù),foreach將自動產(chǎn)生每一項,這種循環(huán)方式在我們后來遍歷集合時很常用,所以也有必要來學習一下,需要的朋友可以參考下
    2023-05-05
  • javacv-ffmpeg ProcessBuilder批量旋轉(zhuǎn)圖片方式

    javacv-ffmpeg ProcessBuilder批量旋轉(zhuǎn)圖片方式

    為了批量處理大量圖片的旋轉(zhuǎn),可以使用javacv-ffmpeg結(jié)合ProcessBuilder,首先在maven配置文件中添加ffmpeg及javacpp依賴,javacpp支持調(diào)用C/C++方法,而ffmpeg基于C語言,使用ProcessBuilder創(chuàng)建進程調(diào)用ffmpeg方法
    2024-09-09

最新評論

阜新| 建瓯市| 江门市| 青川县| 惠来县| 池州市| 漠河县| 德保县| 新和县| 寿光市| 绥德县| 宁都县| 正宁县| 邹城市| 玉门市| 武宁县| 来宾市| 遂平县| 镇江市| 武强县| 疏勒县| 恩平市| 庐江县| 新疆| 霍林郭勒市| 图们市| 新宾| 罗源县| 三原县| 莱州市| 若尔盖县| 通城县| 缙云县| 新和县| 抚顺县| 巧家县| 宁都县| 米易县| 瑞丽市| 绥滨县| 沾化县|