zoukankan      html  css  js  c++  java
  • 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(); 
              } 
     
     
     
  • 相关阅读:
    系统分析师考试
    系统分析师
    软件设计师考试
    海恩法则”的启示:制度不落到实处事故必发
    eclipse下生成Java类图和时序图,生成UML图
    bzoj4010【HNOI2015】菜肴制作
    atitit.提升开发效率---MDA 软件开发方式的革命(5)----列表查询建模
    【数据结构和算法16】堆排序
    这一路走来,冷暖自知 (附算法demos)
    c++实现二叉搜索树
  • 原文地址:https://www.cnblogs.com/wanglao/p/5337836.html
Copyright © 2011-2022 走看看