熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

Java語言中字符的處理

2013-11-15 11:35:14  來源: JSP教程 

  摘要本文主要討論了Java語言中字符的特殊表達形式尤其是中文信息的表達處理闡述了字符處理的關鍵是要將十六位Unicode字符轉換為本地下層平台也就是運行Java虛擬處理機的平台能夠理解的字符形式
  關鍵詞Java字符Unicode字符集
  
  Java是一種編程語言一個運行系統一套開發工具和一個應用程序編程界面(API)Java建立在C++的熟悉有用的特征之上而取消了C++的復雜的危險的和多余的元素它是一個更安全更簡單更容易使用的語言
  
  Java的字符表達
  
  Java語言和C語言對字符進行了互不相同的描述Java使用位的Unicode字符集(該標准描述了許多語言的各種不同字符)因此Java字符是一個位的無符號整數字符變量用來存放單個字符而不是完整的字符串
  
  一個字符(character)就是單個字母(letter)許多字母構成一個單詞一組單詞組成句子以此類推但是對於含有諸如中文信息的字符就不是那麼簡單了
  
  Java的基本的char類型被定義成無符號的它是Java中唯一的一個無符號類型使用位表達字符的主要原因是要讓Java能夠支持任何Unicode字符因此而使得Java適用於描述或顯示任何被Unicode支持的語言可移植性也就會更好但是能夠支持某種語言的字符串顯示和能夠正確打印某種語言的字符串常常是兩個不同的問題由於Oak(Java最初的代號)開發組的主要環境是Unix系統和某些源於Unix的系統所以對開發人員來說最為方便實用的字符集是ISOLatin相應地這一開發組就帶有Unix遺傳性也就導致了Java的I/O系統在很大程度上以Unix的流概念為模型而在Unix系統中每一種I/O設備都是用一串比特的流來表示這種在I/O系統方面取模於Unix的做法使得Java語言擁有位的Java字符而卻只有位的輸入設備這樣就給Java帶來了些不足因此在任何一處Java字符串按位來讀入或寫出的地方都得有一小段程序代碼被稱為劈(hack)來將位的字符映射成為位Unicode或將位的Unicode劈成位字符
  
  問題及解決
  
  我們要實現從一個文件讀取信息尤其是讀取含有中文信息的文件並將讀取到的信息顯示在屏幕上一般我們使用FileInputStream函數打開文件readChar函數讀入字符如下
  
  
  import javaio*;
  public class rf{
   public static void main(String args[]) {
   FileInputStream fis;
   DataInputStream dis;
   char c;
  
   try {
   fis = new FileInputStream(xinxitxt);
   dis = new DataInputStream(fis);
   while (true) {
   c = disreadChar();
   Systemoutprint(c);
   Systemoutflush();
   if (c == \n) break;
   }
   fisclose();
   } catch (Exception e) { }
   Systemexit();
   }
  }
  
  但是事實上運行這一程序所能得到的輸出結果是一堆無用的亂碼不能正確輸出xinxitxt文件內容其原因是readChar函數讀入的是位的Unicode字符而Systemoutprint卻將其當作八位的ISO latin字符輸出
  
  Java 版本引入了一套全新的Readers和Writers接口來處理字符我們可以利用InputStreamReader類而不是DataInputStream來處理文件修改上面的程序如下
  import javaio*;
  
  
  public class rf {
   public static void main(String args[]) {
   FileInputStream fis;
   InputStreamReader irs;
   char ch;
  
   try {
   fis = new FileInputStream(xinxitxt);
   irs = new InputStreamReader(fis);
   while (true) {
   ch = (char) irsread();
   Systemoutprint(c);
   Systemoutflush();
   if (ch == \n) break;
   }
   fisclose();
   } catch (Exception e) { }
   Systemexit();
   }
  }
  
  這樣才能正確輸出xinxitxt中的文本(尤其是中文信息)另外當xinxitxt文件來自不同的機器即來自不同操作平台(或漢字內碼不同)的機器比如 文件來自客戶端(客戶端上傳文件給服務器)而讀取文中信息的操作由服務器端執行如果用上面的程序來實現這一功能就有可能仍然不能得到正確的結果其原因就是輸入編碼轉換失敗我們還需要進行如下的改動
  
  
  
   int c;
   int j=;
   StringBuffer str=new StringBuffer();
   char lll[][]= new char[][];
   String ll=;
   try {
   fis = new FileInputStream(fnametxt);
   irs = new InputStreamReader(fis);
   c=irsread(lll[]);
   while (lll[][j]!= ) {
   strappend(lll[][j]);
   j=j+;
   }
   ll=strtoString();
   Systemoutprintln(ll);
   } catch (IOException e) {
   Systemoutprintln(etoString());}
  
  
  這樣輸出的結果就正確了當然上面的程序是不完整的只是說明了一下解決的方法
  
  總之Java語言中字符處理尤其是中文信息的處理比較特殊在Java中字符處理的關鍵是要將十六位Unicode字符轉換為本地下層平台也就是運行Java虛擬處理機的平台能夠理解的字符形式
  

From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19254.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.