Java語言中字元的處理 (轉)
Java語言中字元的處理 (轉)[@more@]----摘要:本文主要討論了語言中字元的特殊表達形式,尤其是中文資訊的表達處理,闡述了字元處理的關鍵是要將十六位Unicode字元,轉換為本地下層平臺,也就是執行Java虛擬處理機的平臺能夠理解的字元形式。
----關鍵詞:Java、字元、8位、16位、Unicode字符集
----Java是一種語言、一個執行、一套開發工具和一個應用程式設計介面()。Java建立在C++的熟悉、有用的特徵之上,而取消了C++的複雜的、危險的和多餘的元素。它是一個更、更簡單、更容易使用的語言。
1、Java的字元表達
----Java語言和C語言對字元進行了互不相同的描述,Java使用16位的Unicode字符集(該標準描述了許多語言的各種不同字元),因此Java字元是一個16位的無符號整數,字元變數用來存放單個字元,而不是完整的字串。
----一個字元(character),就是單個字母(letter),許多字母構成一個單詞,一組單片語成句子,以此類推。但是對於含有諸如中文資訊的字元,就不是那麼簡單了。
----Java的基本的char型別被定義成無符號的16位,它是Java中唯一的一個無符號型別。使用16位表達字元的主要原因是要讓Java能夠支援任何Unicode字元,因此而使得Java適用於描述或顯示任何被Unicode支援的語言,可移植性也就會更好。但是,能夠支援某種語言的字串顯示,和能夠正確列印某種語言的字串,常常是兩個不同的問題。由於Oak(Java最初的代號)開發組的主要環境是系統和某些源於Unix的系統,所以對開發人員來說,最為方便實用的字符集是ISOLatin-1。相應地,這一開發組就帶有Unix遺傳性,也就導致了Java的I/O系統在很大程度上以Unix的流概念為模型,而在Unix系統中,每一種I/O裝置都是用一串8位元的流來表示。這種在I/O系統方面取模於Unix的做法,使得Java語言擁有16位的Java字元,而卻只有8位的輸入裝置,這樣就給Java帶來了些不足。因此在任何一處Java字串按8位來讀入或寫出的地方,都得有一小段程式程式碼,被稱為"劈()",來將8位的字元對映成為16位Unicode,或將16位的Unicode劈成8位字元。
2、問題及解決
----我們要實現從一個讀取資訊,尤其是讀取含有中文資訊的檔案,並將讀取到的資訊顯示在螢幕上,一般我們使用FileInputStream開啟檔案、readChar函式讀入字元。如下:
import java.io.*;
public class rf{
public static void main(String args[]) {
FileInputStream fis;
DataInputStream dis;
char c;
try {
fis = new FileInputStream("xinxi.txt");
dis = new DataInputStream(fis);
while (true) {
c = dis.readChar();
System.out.print(c);
System.out.flush();
if (c == 'n') break;
}
fis.close();
} catch (Exception e) { }
System.exit(0);
}
}
----但是事實上,執行這一程式,所能得到的輸出結果是一堆無用的亂碼。不能正確輸出xinxi.txt檔案內容,其原因是readChar函式讀入的是16位的Unicode字元,而System.out.print卻將其當作八位的ISO latin-1字元輸出。
----Java 1.1版本引入了一套全新的Readers和Writers介面來處理字元。我們可以利用InputStreamReader類而不是DataInputStream來處理檔案。修改上面的程式如下:
import java.io.*;
public class rf {
public static void main(String args[]) {
FileInputStream fis;
InputStreamReader irs;
char ch;
try {
fis = new FileInputStream("xinxi.txt");
irs = new InputStreamReader(fis);
while (true) {
ch = (char) irs.read();
System.out.print(c);
System.out.flush();
if (ch == 'n') break;
}
fis.close();
} catch (Exception e) { }
System.exit(0);
}
}
----這樣才能正確輸出xinxi.txt中的文字(尤其是中文資訊)。另外,當xinxi.txt檔案來自不同的機器,即來自不同操作平臺(或漢字內碼不同)的機器,比如: 檔案來自客戶端(客戶端檔案給),而讀取文中資訊的操作由伺服器端。如果用上面的程式來實現這一功能,就有可能仍然不能得到正確的結果。其原因就是輸入編碼轉換失敗,我們還需要進行如下的改動:
......
int c1;
int j=0;
StringBuffer str=new StringBuffer();
char lll[][]= new char[20][500];
String ll="";
try {
fis = new FileInputStream("fname.txt");
irs = new InputStreamReader(fis);
c1=irs.read(lll[1],0,50);
while (lll[1][j]!=' ') {
str.append(lll[1][j]);
j=j+1;
}
ll=str.toString();
System.out.println(ll);
} catch (IOException e) {
System.out.println(e.toString());}
......
----這樣,輸出的結果就正確了。當然,上面的程式是不完整的,只是說明了一下解決的方法。
----總之,Java語言中字元處理,尤其是中文資訊的處理,比較特殊。在Java中,字元處理的關鍵是要將十六位Unicode字元,轉換為本地下層平臺也就是執行Java虛擬處理機的平臺能夠理解的字元形式。
----關鍵詞:Java、字元、8位、16位、Unicode字符集
----Java是一種語言、一個執行、一套開發工具和一個應用程式設計介面()。Java建立在C++的熟悉、有用的特徵之上,而取消了C++的複雜的、危險的和多餘的元素。它是一個更、更簡單、更容易使用的語言。
1、Java的字元表達
----Java語言和C語言對字元進行了互不相同的描述,Java使用16位的Unicode字符集(該標準描述了許多語言的各種不同字元),因此Java字元是一個16位的無符號整數,字元變數用來存放單個字元,而不是完整的字串。
----一個字元(character),就是單個字母(letter),許多字母構成一個單詞,一組單片語成句子,以此類推。但是對於含有諸如中文資訊的字元,就不是那麼簡單了。
----Java的基本的char型別被定義成無符號的16位,它是Java中唯一的一個無符號型別。使用16位表達字元的主要原因是要讓Java能夠支援任何Unicode字元,因此而使得Java適用於描述或顯示任何被Unicode支援的語言,可移植性也就會更好。但是,能夠支援某種語言的字串顯示,和能夠正確列印某種語言的字串,常常是兩個不同的問題。由於Oak(Java最初的代號)開發組的主要環境是系統和某些源於Unix的系統,所以對開發人員來說,最為方便實用的字符集是ISOLatin-1。相應地,這一開發組就帶有Unix遺傳性,也就導致了Java的I/O系統在很大程度上以Unix的流概念為模型,而在Unix系統中,每一種I/O裝置都是用一串8位元的流來表示。這種在I/O系統方面取模於Unix的做法,使得Java語言擁有16位的Java字元,而卻只有8位的輸入裝置,這樣就給Java帶來了些不足。因此在任何一處Java字串按8位來讀入或寫出的地方,都得有一小段程式程式碼,被稱為"劈()",來將8位的字元對映成為16位Unicode,或將16位的Unicode劈成8位字元。
2、問題及解決
----我們要實現從一個讀取資訊,尤其是讀取含有中文資訊的檔案,並將讀取到的資訊顯示在螢幕上,一般我們使用FileInputStream開啟檔案、readChar函式讀入字元。如下:
import java.io.*;
public class rf{
public static void main(String args[]) {
FileInputStream fis;
DataInputStream dis;
char c;
try {
fis = new FileInputStream("xinxi.txt");
dis = new DataInputStream(fis);
while (true) {
c = dis.readChar();
System.out.print(c);
System.out.flush();
if (c == 'n') break;
}
fis.close();
} catch (Exception e) { }
System.exit(0);
}
}
----但是事實上,執行這一程式,所能得到的輸出結果是一堆無用的亂碼。不能正確輸出xinxi.txt檔案內容,其原因是readChar函式讀入的是16位的Unicode字元,而System.out.print卻將其當作八位的ISO latin-1字元輸出。
----Java 1.1版本引入了一套全新的Readers和Writers介面來處理字元。我們可以利用InputStreamReader類而不是DataInputStream來處理檔案。修改上面的程式如下:
import java.io.*;
public class rf {
public static void main(String args[]) {
FileInputStream fis;
InputStreamReader irs;
char ch;
try {
fis = new FileInputStream("xinxi.txt");
irs = new InputStreamReader(fis);
while (true) {
ch = (char) irs.read();
System.out.print(c);
System.out.flush();
if (ch == 'n') break;
}
fis.close();
} catch (Exception e) { }
System.exit(0);
}
}
----這樣才能正確輸出xinxi.txt中的文字(尤其是中文資訊)。另外,當xinxi.txt檔案來自不同的機器,即來自不同操作平臺(或漢字內碼不同)的機器,比如: 檔案來自客戶端(客戶端檔案給),而讀取文中資訊的操作由伺服器端。如果用上面的程式來實現這一功能,就有可能仍然不能得到正確的結果。其原因就是輸入編碼轉換失敗,我們還需要進行如下的改動:
......
int c1;
int j=0;
StringBuffer str=new StringBuffer();
char lll[][]= new char[20][500];
String ll="";
try {
fis = new FileInputStream("fname.txt");
irs = new InputStreamReader(fis);
c1=irs.read(lll[1],0,50);
while (lll[1][j]!=' ') {
str.append(lll[1][j]);
j=j+1;
}
ll=str.toString();
System.out.println(ll);
} catch (IOException e) {
System.out.println(e.toString());}
......
----這樣,輸出的結果就正確了。當然,上面的程式是不完整的,只是說明了一下解決的方法。
----總之,Java語言中字元處理,尤其是中文資訊的處理,比較特殊。在Java中,字元處理的關鍵是要將十六位Unicode字元,轉換為本地下層平臺也就是執行Java虛擬處理機的平臺能夠理解的字元形式。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-989060/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【譯文】R語言中的缺失值處理R語言
- java replaceall 用法:處理特殊字元Java字元
- 好程式設計師Java分享Java語言中的常見的跳脫字元程式設計師Java字元
- go 語言中的 rune,獲取字元長度Go字元
- Oracle sql 語句中帶有特殊的字元處理OracleSQL字元
- [HandyJSON] 在Swift語言中處理JSON - 轉換JSON和ModelJSONSwift
- R語言資料處理(二)字元分隔R語言字元
- [譯] 最詳細的 CSS 字元轉義處理CSS字元
- C#轉義字元的兩種處理方式C#字元
- shell 字元處理字元
- 特殊字元的處理。。¥$$$字元
- 解析C語言中的sizeof (轉)C語言
- Swift3.0語言教程刪除字元與處理字元編碼Swift字元
- c語言中文和ascii碼字元分離C語言ASCII字元
- 處理檔名內含有特殊字元的檔案 (轉)字元
- Go語言中用於錯誤處理的Defer、Panic和Recover - Sachin KarveGo
- Rill:Go語言中併發+事務的批處理開源專案Go
- 字元處理函式字元函式
- tr命令“字元”處理字元
- 使用 pymysql 的時候如何正確的處理轉義字元MySql字元
- C語言中寫一個程式將浮點型轉化成字元型輸出C語言字元
- Go 語言中遇到 _func not exported by package_ 錯誤,應該如何處理?GoExportPackage
- 淺析Java語言中的內部類Java
- vim下處理文件中的 字元字元
- SQL特殊字元處理zzSQL字元
- Oracle函式-->字元處理Oracle函式字元
- MyBatis 跳脫字元處理MyBatis字元
- 在C語言中引入類的概念(轉)C語言
- Go語言中介軟體框架 Negroni 的靜態檔案處理原始碼分析Go框架原始碼
- 轉載:Java處理高併發量訪問的處理總結Java
- Java SimpleDateFormat處理日期與字串的轉換JavaORM字串
- 在C語言中,匹配字元一定要用單引號!!!C語言字元
- 06.字元和字串處理字元字串
- 批處理特殊符號 萬用字元與轉義符符號字元
- gitbash 不支援中文處理(中文字元被轉義)Git字元
- oracle動態sql語句處理(轉)OracleSQL
- 【轉】C語言中 -> 是什麼意思?C語言
- Java提高篇(二):IO位元組流、字元流和處理流Java字元