方法一:java.lang.String

 


  1. 用于解码的构造器:  
1. String(byte[] bytes, int offset, int
2. String(byte[] bytes, String charsetName)   
3.   
4. 用于编码的方法:  
5. byte[] getBytes(String charsetName)  //使用指定字符集进行编码
6. byte[] getBytes() //使用系统默认字符集进行编码


1. public void convertionString() throws UnsupportedEncodingException{  
2. "清山";  
3. "gbk");//编码  
4. "gbk");//解码:用什么字符集编码就用什么字符集解码  
5.         System.out.println(sa);  
6.           
7. "utf-8");//编码  
8. "utf-8");//解码  
9.         System.err.println(sa);  
10.     }

 


方法二:java.io.InputStreamReader/OutputStreamWriter:桥转换

 

1. package
2.   
3. import
4. import
5. import
6. import
7. import
8. import
9. import
10. import
11.   
12. /**
13.  * <pre>
14.  * 使用java.io桥转换:对文件进行转码
15.  * </pre>
16.  * <hr Color="green" ></hr> 
17.  * 2012 Qingshan Group 版权所有
18.  * <hr Color="green" ></hr> 
19.  * @author  thetopofqingshan
20.  * @version 1.0.0
21.  * @since   JDK 1.5
22.  * @date    2012-4-28
23.  */
24. public class
25. private FileInputStream fis;// 文件输入流:读取文件中内容
26. private
27. private
28. private
29. private OutputStreamWriter osw;//写入
30. private char[] ch = new char[1024];  
31. public  void convertionFile() throws
32. new FileInputStream("C:/项目进度跟踪.txt");//文件读取
33. new InputStreamReader(is, "gbk");//解码
34. new FileOutputStream("C:/项目进度跟踪_utf-8.txt");//文件输出
35. new OutputStreamWriter(os, "utf-8");//开始编码
36. char[] c = new char[1024];//缓冲
37. int length = 0;  
38. while(true){  
39.             length = isr.read(c);  
40. if(length == -1){  
41. break;  
42.             }  
43. new String(c, 0, length));  
44. 0, length);  
45.             osw.flush();  
46.         }  
47.           
48.     }  
49.       
50. public void convertionString() throws
51. "清山集团";  
52. byte[] b = s.getBytes("gbk");//编码
53. new String(b, "gbk");//解码:用什么字符集编码就用什么字符集解码
54.         System.out.println(sa);  
55.           
56. "utf-8");//编码
57. new String(b, "utf-8");//解码
58.         System.err.println(sa);  
59.     }  
60.       
61.       
62.   
63. /**
64.      * <pre>
65.      * 关闭所有流
66.      * </pre>
67.      *
68.      */
69. public void
70. if(isr != null){  
71. try
72.                 isr.close();  
73. catch
74.                 e.printStackTrace();  
75.             }  
76.         }  
77. if(is != null){  
78. try
79.                 is.close();  
80. catch
81. // TODO Auto-generated catch block
82.                 e.printStackTrace();  
83.             }  
84.         }  
85.           
86. if(osw != null){  
87. try
88.                 osw.close();  
89. catch
90. // TODO Auto-generated catch block
91.                 e.printStackTrace();  
92.             }  
93.         }  
94.           
95. if(os != null){  
96. try
97.                 os.close();  
98. catch
99. // TODO Auto-generated catch block
100.                 e.printStackTrace();  
101.             }  
102.         }  
103.     }  
104.       
105. /**
106.      * <pre>
107.      * 用io读取文件内容
108.      * </pre>
109.      * 
110.      * @throws IOException
111.      *             读取过程中发生错误
112.      * 
113.      */
114.       
115. /**
116.      * <pre>
117.      * 
118.      * </pre>
119.      * @param path
120.      * @param charset
121.      * @throws IOException
122.      *
123.      */
124. public void read(String path, String charset) throws
125. new
126. new
127. while (fis.available() > 0) {  
128. int
129. new
130.         }  
131.     }  
132.   
133.       
134. public static void
135. try
136. new
137.             cc.convertionFile();  
138.             cc.convertionString();  
139.             cc.close();  
140. catch
141.             e.printStackTrace();  
142.         }  
143.     }  
144. }


方法三:java.nio.Charset

 

1. package
2.   
3. import
4. import
5. import
6. import
7. import
8. import
9. import
10. import
11. import
12. import
13.   
14. /**
15.  * <pre>
16.  * 使用nio中的Charset转换字符:整个流程是文件读取-->byte-->解码(正确)-->编码--->byte-->写入文件
17.  * </pre>
18.  * <hr Color="green" >
19.  * </hr>
20.  * 2012 Qingshan Group 版权所有
21.  * <hr Color="green" >
22.  * </hr>
23.  * 
24.  * @author thetopofqingshan
25.  * @version 1.0.0
26.  * @since JDK 1.5
27.  * @date 2012-4-27
28.  */
29. public class
30. private FileInputStream fis;// 文件输入流:读取文件中内容
31. private FileChannel in;// 文件通道:双向,流从中而过
32. private FileChannel out;// 文件通道:双向,流从中而过
33. private FileOutputStream fos;// 文件输出流:向文件中写入内容
34. private ByteBuffer b = ByteBuffer.allocate(1024 * 3);// 设置缓存区的大小
35. private Charset inSet;// 解码字符集
36. private Charset outSet;// 编码字符集
37. private CharsetDecoder de;// 解码器
38. private CharsetEncoder en;// 编码器
39. private CharBuffer convertion;// 中间的字符数据
40. private ByteBuffer temp = ByteBuffer.allocate(1024 * 3);// 设置缓存区的大小:临时
41. private byte[] by = new byte[1024];  
42. private
43. private char[] ch = new char[1024];  
44.   
45. /**
46.      * <pre>
47.      * 
48.      * </pre>
49.      * 
50.      * @param src
51.      * @param dest
52.      * @throws IOException
53.      * 
54.      */
55. public void convertionFile_nio(String src, String dest) throws
56. new
57.         in = fis.getChannel();  
58. new
59.         out = fos.getChannel();  
60. "gbk");  
61. "utf-8");  
62.         de = inSet.newDecoder();  
63.         en = outSet.newEncoder();  
64. while (fis.available() > 0) {  
65. // 清除标记
66. // 将文件内容读入到缓冲区内:将标记位置从0-b.capacity(),
67. // 读取完毕标记在0-b.capacity()之间
68. // 调节标记,下次读取从该位置读起
69. // 开始编码
70.   
71. // 清除标记
72.             temp = en.encode(convertion);  
73. // 将标记移到缓冲区的开始,并保存其中所有的数据:将标记移到开始0
74. // 将缓冲区内的内容写入文件中:从标记处开始取出数据
75.         }  
76.     }  
77.   
78. /**
79.      * <pre>
80.      * 测试转码是否成功, 指定字符集读取文件
81.      * </pre>
82.      * 
83.      * @param src
84.      *            被复制文件全路径
85.      * @param charset 解码字符集
86.      * 
87.      * @throws IOException 读取过程中的发生的异常
88.      * 
89.      */
90. public void read(String path, String charset) throws
91. new
92. new
93. while (fis.available() > 0) {  
94. int
95. new
96.         }  
97.     }  
98.   
99. /**
100.      * <pre>
101.      * 关闭所有流或通道
102.      * </pre>
103.      * 
104.      */
105. public void
106. try
107. if (in != null) {  
108.                 in.close();  
109.             }  
110. catch
111.             e.printStackTrace();  
112.         }  
113.   
114. try
115. if (out != null) {  
116.                 out.close();  
117.             }  
118. catch
119.             e.printStackTrace();  
120.         }  
121.   
122. try
123. if (fis != null) {  
124.                 fis.close();  
125.             }  
126. catch
127.             e.printStackTrace();  
128.         }  
129.   
130. try
131. if (fos != null) {  
132.                 fos.close();  
133.             }  
134. catch
135.             e.printStackTrace();  
136.         }  
137.     }  
138.   
139. public static void
140. new
141. try
142. "C:/项目进度跟踪.txt", "C:/nio_write.txt");  
143. //          n.read("C:/nio_write.txt", "utf-8");// 正确
144. // n.read("C:/nio_write.txt", "gbk");//乱码
145. catch
146.             e.printStackTrace();  
147. finally
148.             n.close();  
149.         }  
150.     }  
151.   
152. }