java 输出编码_从代码看java输入输出中的编码和解码
在java中,采用Unicode編碼,英文字符和漢字都占兩個字節,下面的代碼都是在中文操作系統上執行的,系統采用GBK編碼。
1.看一下下面這段代碼的編碼和解碼:當我們在鍵盤上敲入字符的時候,其采用的是GBK編碼,比如我們敲入'b',它占兩個字節。read()每次讀取一個字節,返回一個int數據,該int數據,int的構成是最低位字節是read讀取的字節,其余24位補0,'b'就回了兩個int數據。write(data),每次向輸出流中寫入一個字節,寫入的字節是data的最低位字節,這樣寫入的字節就和輸入'b'編碼后的字節一致。然后系統在按照GBK進行解碼輸出顯示'b'。
1 int data;
2 while((data=System.in.read())!=-1)
3 {
4 System.out.write(data);
5 }
2.再來看看這段代碼的編碼和解碼:代碼讀取的文件中的數據存在計算機中,它采用GBK編碼。input.read(array)將這些字節讀入到array數組中。new String(array,0,len)采用的是系統默認字符集GBK(中文環境下)進行解碼出字符串,字符串在計算機中采用Unicode進行編碼存儲。系統按照GBK進行解碼字符串,并輸出顯示。
1 FileInputStream inPut = new FileInputStream("D:"+File.separator+"test"+File.separator+"hello.txt");
2 byte[] array = new byte[100];
3 int len = inPut.read(array);
4 System.out.println(new String(array,0,len));
5 inPut.close();
3.getBytes()采用系統默認字符集GBK編碼“Hello FileOutputStreamaaa”,outPut.write(“Hello FileOutputStreamaaa”.getBytes())將這些字節寫入到輸出流中,系統采用GBK解碼輸出這些字節。
FileOutputStream outPut = new FileOutputStream("D:"+File.separator+"test"+File.separator+"hello.txt");
outPut.write("Hello FileOutputStreamaaa".getBytes());
outPut.close();
4.dos.writeByte(b)以一個字節的長度,向輸出流中寫入b,,dos.writeBoolean(a)以一個字節的長度,向輸出流中寫入a,而我們的本地系統采用GBK進行編碼,所以會出現亂碼,dos.writeInt(c)以四個字節的長度,向輸出流中寫入c,dos.writeChar(d)以兩個字節的長度,向輸出流中寫入d。而我們當我們打開被寫入的文件時,它是按照GBK進行解碼(雙字節)就會出現亂碼。
FileOutputStream outPut = new FileOutputStream("D:"+File.separator+"test"+File.separator+"hello.txt");
BufferedOutputStream buffOutput = new BufferedOutputStream(outPut);
DataOutputStream dos = new DataOutputStream(buffOutput);
byte b = 1;
boolean a = false;
int c = 12;
char d = 'd';
dos.writeByte(b);
dos.writeBoolean(a);
dos.writeInt(c);
dos.writeChar(d);
dos.close();
5.這是一個字符流,我們指定了outWrite采用ASCII進行編碼。"Hello博客園"采用Unicode編碼存儲在計算機中,writer.write()每次向輸出流中寫入兩個字節(一個字符),"Hello"每個字符從Unicode向ASCII轉換,保留低位,仍能正確表示原來字符。而"博客園"每個漢字從Unicode向ASCII轉換的時候,則被丟棄一位,不能正確表示,當我們打開被寫入的記事本文件的時候,按照GBK進行解碼顯示輸出。
FileOutputStream outStream = new FileOutputStream("D:"+File.separator+"test"+File.separator+"hello.txt");
OutputStreamWriter outWriter = new OutputStreamWriter(outStream,"ASCII");
BufferedWriter writer = new BufferedWriter(outWriter);
writer.write("HEllO博客園");
writer.close();
6.在這里我們將平臺的默認字符編碼集改為"ISO-8859-1",我們在鍵盤上敲入數據,這些數據按照GBK進行編碼(每個字符站兩個字節),我們將么這些字節存放到array中。然后String(array,0,index)采用"ISO-8859-1"(單字節)進行解碼,就會出現亂碼。
Properties pro = System.getProperties();//獲取java虛擬機的系統屬性pro.setProperty("file.encoding", "ISO-8859-1");
int data,index = 0;
byte[] array = new byte[100];
while((data=System.in.read())!='q')
{
array[index] = (byte)data;
index++;
}
String str = new String(array,0,index);
System.out.println(str);
總結
以上是生活随笔為你收集整理的java 输出编码_从代码看java输入输出中的编码和解码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 塞尔达传说费罗龙在哪(为什么游戏《塞尔达
- 下一篇: java网络编程实例_关于java网络编