java utf-8文件處理bom頭


UTF?
UTF,是UnicodeTransformationFormat的縮寫,意為Unicode轉換格式。 即怎樣將Unicode定義的數字轉換成程序數據。utf是對Unicode的一種編碼格式化。 JVM里面的任何字符串資源都是Unicode,就是說,任何String類型的數據都是Unicode編碼。沒有例外。既然只有一種編碼,那么,我們可以這么說,JVM里面的String是不帶編碼的。String相當於 char[]。 
JVM里面的 byte[] 數據是帶編碼的。比如,Big5,GBK,GB2312,UTF-8之類的(GBK並不屬於utf)。
  一個GBK編碼的byte[] 轉換成 String,其實就是從GBK編碼向Unicode編碼轉換。 
一個String轉換成一個Big5編碼的byte[],其實就是從Unicode編碼向Big5編碼轉換。 我們在解析的時候就要注意是不是utf編碼。
 
有幾種UTF?
這里用char、char16_t、char32_t分別表示無符號8位整數,無符號16位整數和無符號32位整數。UTF-8、UTF-16、UTF-32分別以char、char16_t、char32_t作為編碼單位。
 
什么是bom?
放在文件頭用於標示Unicode編碼格式。
 
bom會引起什么問題?
記事本保存的文件會存儲bom,在解析的時候,在頭部會多出一個亂碼。
 
 
如何解決:
編程時根據具體的編碼類型剔除頭bom
       public static String ReadFile(String path ,StringFilter filter ) throws IOException { 
              File file = new File( path ); 
              if (! file .exists()) {
                   throw new IOException( "文件不存在" );
                  }
              BufferedReader reader = null
              StringBuffer laststr = new StringBuffer(); 
             
              InputStream in = new FileInputStream( file );
              try
                  reader = new BufferedReader( new UnicodeReader( in , "utf-8" )); 
                  String tempString = null
                  while (( tempString = reader .readLine()) != null ) { 
                         if ( filter != null ) {
                               tempString = filter .RemoveString( tempString );
                              }
                         laststr .append( tempString );
                  } 
                  reader .close(); 
              } catch (IOException e ) { 
                   throw new IOException( "文件讀寫錯誤" );
              } finally
                  if ( reader != null ) { 
                      try
                          reader .close(); 
                      } catch (IOException e1 ) { 
                         throw new IOException( "文件流關閉錯誤" );
                      } 
                  } 
              } 
              return laststr .toString(); 
          } 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM