激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - java字符轉(zhuǎn)碼的三種方法總結(jié)及實(shí)例

java字符轉(zhuǎn)碼的三種方法總結(jié)及實(shí)例

2020-09-04 14:06Java之家 Java教程

這篇文章主要介紹了 java字符轉(zhuǎn)碼的三種方法總結(jié)及實(shí)例的相關(guān)資料,需要的朋友可以參考下

java字符轉(zhuǎn)碼:三種方法

轉(zhuǎn)碼成功的前提:解碼后無亂碼

轉(zhuǎn)碼流程:文件(gbk)-->解碼-->編碼--->文件(utf-8) 

注:如有問題請(qǐng)留言 

下面具體的實(shí)例

 方法一:Java.lang.String

?
1
2
3
4
5
6
7
8
//用于解碼的構(gòu)造器:
String(byte[] bytes, int offset, int length, String charsetName) 
String(byte[] bytes, String charsetName) 
 
用于編碼的方法:
byte[] getBytes(String charsetName) //使用指定字符集進(jìn)行編碼
 byte[] getBytes() //使用系統(tǒng)默認(rèn)字符集進(jìn)行編碼
<br>
?
1
2
3
4
5
6
7
8
9
10
public void convertionString() throws UnsupportedEncodingException{
    String s = "清山";
    byte[] b = s.getBytes("gbk");//編碼
    String sa = new String(b, "gbk");//解碼:用什么字符集編碼就用什么字符集解碼
    System.out.println(sa);
     
    b = sa.getBytes("utf-8");//編碼
    sa = new String(b, "utf-8");//解碼
    System.err.println(sa);
  }

方法二:java.io.InputStreamReader/OutputStreamWriter:橋轉(zhuǎn)換 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
package com.qingshan.io;
 
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
 
/**
 * <pre>
 * 使用java.io橋轉(zhuǎn)換:對(duì)文件進(jìn)行轉(zhuǎn)碼
 * </pre>
 * <hr Color="green" ></hr>
 * 2012 Qingshan Group 版權(quán)所有
 * <hr Color="green" ></hr>
 * @author thetopofqingshan
 * @version 1.0.0
 * @since  JDK 1.5
 * @date  2012-4-28
 */
public class CharsetConvertion {
  private FileInputStream fis;// 文件輸入流:讀取文件中內(nèi)容
  private InputStream is;
  private InputStreamReader isr;
  private OutputStream os;
  private OutputStreamWriter osw;//寫入
  private char[] ch = new char[1024];
  public void convertionFile() throws IOException{
    is = new FileInputStream("C:/項(xiàng)目進(jìn)度跟蹤.txt");//文件讀取
    isr = new InputStreamReader(is, "gbk");//解碼
    os = new FileOutputStream("C:/項(xiàng)目進(jìn)度跟蹤_utf-8.txt");//文件輸出
    osw = new OutputStreamWriter(os, "utf-8");//開始編碼
    char[] c = new char[1024];//緩沖
    int length = 0;
    while(true){
      length = isr.read(c);
      if(length == -1){
        break;
      }
      System.out.println(new String(c, 0, length));
      osw.write(c, 0, length);
      osw.flush();
    }
     
  }
   
  public void convertionString() throws UnsupportedEncodingException{
    String s = "清山集團(tuán)";
    byte[] b = s.getBytes("gbk");//編碼
    String sa = new String(b, "gbk");//解碼:用什么字符集編碼就用什么字符集解碼
    System.out.println(sa);
     
    b = sa.getBytes("utf-8");//編碼
    sa = new String(b, "utf-8");//解碼
    System.err.println(sa);
  }
   
   
 
  /**
   * <pre>
   * 關(guān)閉所有流
   * </pre>
   *
   */
  public void close(){
    if(isr != null){
      try {
        isr.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
    if(is != null){
      try {
        is.close();
      } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
     
    if(osw != null){
      try {
        osw.close();
      } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
     
    if(os != null){
      try {
        os.close();
      } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
  }
   
  /**
   * <pre>
   * 用io讀取文件內(nèi)容
   * </pre>
   *
   * @throws IOException
   *       讀取過程中發(fā)生錯(cuò)誤
   *
   */
   
  /**
   * <pre>
   *
   * </pre>
   * @param path
   * @param charset
   * @throws IOException
   *
   */
  public void read(String path, String charset) throws IOException {
    fis = new FileInputStream(path);
    isr = new InputStreamReader(fis, charset);
    while (fis.available() > 0) {
      int length = isr.read(ch); 
      System.out.println(new String(ch));
    }
  }
 
   
  public static void main(String[] args) {
    try {
      CharsetConvertion cc = new CharsetConvertion();
      cc.convertionFile();
      cc.convertionString();
      cc.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

方法三:java.nio.Charset

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
package com.qingshan.nio;
 
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.channels.FileChannel;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;
 
/**
 * <pre>
 * 使用nio中的Charset轉(zhuǎn)換字符:整個(gè)流程是文件讀取-->byte-->解碼(正確)-->編碼--->byte-->寫入文件
 * </pre>
 * <hr Color="green" >
 * </hr>
 * 2012 Qingshan Group 版權(quán)所有
 * <hr Color="green" >
 * </hr>
 *
 * @author thetopofqingshan
 * @version 1.0.0
 * @since JDK 1.5
 * @date 2012-4-27
 */
public class CharsetConvertion {
  private FileInputStream fis;// 文件輸入流:讀取文件中內(nèi)容
  private FileChannel in;// 文件通道:雙向,流從中而過
  private FileChannel out;// 文件通道:雙向,流從中而過
  private FileOutputStream fos;// 文件輸出流:向文件中寫入內(nèi)容
  private ByteBuffer b = ByteBuffer.allocate(1024 * 3);// 設(shè)置緩存區(qū)的大小
  private Charset inSet;// 解碼字符集
  private Charset outSet;// 編碼字符集
  private CharsetDecoder de;// 解碼器
  private CharsetEncoder en;// 編碼器
  private CharBuffer convertion;// 中間的字符數(shù)據(jù)
  private ByteBuffer temp = ByteBuffer.allocate(1024 * 3);// 設(shè)置緩存區(qū)的大小:臨時(shí)
  private byte[] by = new byte[1024];
  private InputStreamReader isr;
  private char[] ch = new char[1024];
 
  /**
   * <pre>
   *
   * </pre>
   *
   * @param src
   * @param dest
   * @throws IOException
   *
   */
  public void convertionFile_nio(String src, String dest) throws IOException {
    fis = new FileInputStream(src);
    in = fis.getChannel();
    fos = new FileOutputStream(dest);
    out = fos.getChannel();
    inSet = Charset.forName("gbk");
    outSet = Charset.forName("utf-8");
    de = inSet.newDecoder();
    en = outSet.newEncoder();
    while (fis.available() > 0) {
      b.clear();// 清除標(biāo)記
      in.read(b); // 將文件內(nèi)容讀入到緩沖區(qū)內(nèi):將標(biāo)記位置從0-b.capacity(),
            // 讀取完畢標(biāo)記在0-b.capacity()之間
      b.flip();// 調(diào)節(jié)標(biāo)記,下次讀取從該位置讀起
      convertion = de.decode(b);// 開始編碼
 
      temp.clear();// 清除標(biāo)記
      temp = en.encode(convertion);
      b.flip(); // 將標(biāo)記移到緩沖區(qū)的開始,并保存其中所有的數(shù)據(jù):將標(biāo)記移到開始0
      out.write(temp); // 將緩沖區(qū)內(nèi)的內(nèi)容寫入文件中:從標(biāo)記處開始取出數(shù)據(jù)
    }
  }
 
  /**
   * <pre>
   * 測(cè)試轉(zhuǎn)碼是否成功, 指定字符集讀取文件
   * </pre>
   *
   * @param src
   *      被復(fù)制文件全路徑
   * @param charset 解碼字符集
   *
   * @throws IOException 讀取過程中的發(fā)生的異常
   *
   */
  public void read(String path, String charset) throws IOException {
    fis = new FileInputStream(path);
    isr = new InputStreamReader(fis, charset);
    while (fis.available() > 0) {
      int length = isr.read(ch);
      System.out.println(new String(ch));
    }
  }
 
  /**
   * <pre>
   * 關(guān)閉所有流或通道
   * </pre>
   *
   */
  public void close() {
    try {
      if (in != null) {
        in.close();
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
 
    try {
      if (out != null) {
        out.close();
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
 
    try {
      if (fis != null) {
        fis.close();
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
 
    try {
      if (fos != null) {
        fos.close();
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
 
  public static void main(String[] args) {
    CharsetConvertion n = new CharsetConvertion();
    try {
       n.convertionFile_nio("C:/項(xiàng)目進(jìn)度跟蹤.txt", "C:/nio_write.txt");
//     n.read("C:/nio_write.txt", "utf-8");// 正確
      // n.read("C:/nio_write.txt", "gbk");//亂碼
    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      n.close();
    }
  }
 
}

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

原文鏈接:http://blog.csdn.net/zhengqiqiqinqin/article/details/12621201

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产真实孩交 | 素人视频在线观看免费 | 国产亚色| 青青国产在线视频 | 欧美日性| 国产人成免费爽爽爽视频 | 超碰99在线观看 | 日本高清电影在线播放 | 伊人网站| 欧美黑大粗硬毛片视频 | 欧美日本一区二区 | 九色中文 | 欧美激情综合网 | 中文字幕网址 | 亚州综合一区 | 在线观看麻豆 | 91成人免费视频 | 九九热视频这里只有精品 | 黄色日韩网站 | 亚洲 91| 在线视频观看国产 | 久久福利电影网 | 欧美亚洲黄色 | av成人免费在线观看 | 91精品视频免费 | 国产一区二区三区四区精 | 性猛aa久久久 | 欧美黄色性视频 | 免费a级观看 | japanese massage tube| 泰剧19禁啪啪无遮挡大尺度 | 国产一区国产二区在线观看 | 91网视频 | 成人在线97 | 中文字幕精品在线观看 | 综合毛片| 久草在线最新 | 国产精品一区二区手机在线观看 | 久久久久久久亚洲精品 | 国产一级一区 | 午夜精品视频免费观看 |