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(); 
          } 
 
 
 

java utf-8文件处理bom头的更多相关文章

  1. 什么是文件的BOM头

    1.什么是BOM? BOM是用来判断文本文件是哪一种Unicode编码的标记,其本身是一个Unicode字符("\uFEFF"),位于文本文件头部. 在不同的Unicode编码中, ...

  2. 什么是文件的BOM头,及BOM头有哪些坑?

    1.什么是BOM? BOM是用来判断文本文件是哪一种Unicode编码的标记,其本身是一个Unicode字符("\uFEFF"),位于文本文件头部. 在不同的Unicode编码中, ...

  3. 关于UTF8文件带BOM头可能会引起的错误解析

    今天在做一个文件上传的项目中碰到了一个十分奇怪的问题,在解析上传上来的csv文件时,总是在解析第一行的第一个标题字段时出错,就是第一个那个字段总是和对应的model字段对应不上,这个坑是真的很深,找了 ...

  4. 批量去除文件的BOM头

    <?php class KillBom{ //定义扩展名 public static $m_ext = ['txt','php','js','css']; /** * 传入一个任意文件,自动区分 ...

  5. 史上最牛逼的文件bom头清除代码,万能检测清除php,js等等

    做php开发,经常部分uft8的php文件因BOM头不同导致各种错误和错位.网上搜到的大部分所谓的去处bom工具都是2货,没有能用的.下面的一段代码,请复制到一个php文件里,然后上传到你的网站根目录 ...

  6. php fwrite写入文件bom头导致的乱码问题解决

    最近导出文件遇到fwrite导出乱码,而且中英文都乱码,很费解.折腾了一番之后终于找到问题所在了,mark下. UTF-8 BOM 又叫 UTF-8 签名,其实 UTF-8 的 BOM 对 UFT-8 ...

  7. php中隐形字符65279(utf-8的BOM头)问题和fwrite写入文件bom头导致的乱码问题解决

     php中隐形字符65279(utf-8的BOM头)问题 今天在CSDN看到一个php输出空白隐形字符65279的问题,在网上找了下,发下这个65279字符是php用来标记文件是utf-8编码的,输出 ...

  8. linux中截取文件的特定字节(去掉utf-8 bom头)

    事出有因,之所以要截取特定字节,是为了给utf-8编码的文件去掉bom头. bom头好去啊,notepad++文本编辑器中就有这个功能啊.可是,问题所在是要编辑的文件太大了,300MB,小电脑卡shi ...

  9. linux下bom头导致的php调用php接口 返回的json字符串 无法转成 数组,即json字符串无法解码的问题

    今天很是郁闷,写了一个php接口,返回的是标准的json字符串,但是调用的php 就是无法json_decode(),返回错误码为4,最后终于找到原因,原来是蒙一个文件中有bom头,最后采用一个命令 ...

随机推荐

  1. 免费 PSD 下载: 20个精美的登录和注册表单

    注册表单有许多不同的形状和尺寸,有的只是单个的输入框,有的则需要多个步骤.登录表单的设计将定义网站的性质,因此它应进行针对性的设计.下面的列表提供了20个醒目的登录和注册表单设计为您提供灵感. 您可能 ...

  2. 调用没有在AndroidManifest.xml注册过的Activity,报出的错误提示

  3. MyGame--java语言编写的打飞机游戏(附源码下载)

    运行效果如下图所示: 点击这里进行下载, 还有源码已经传至我的github上,还有一些小bug,欢迎大家改正. 说明:最后打boss的效果还没做,爆炸的图片也没好,欢迎大家修改.

  4. JQuery+HTML5+CSS3制作时间轴插件,支持响应式布局

    一.效果图预览 (图一) (图二) 附注说明: 图一是浏览器宽度像素大于560px下的展示效果,图二是在浏览器宽度像素小于560px下的展现效果.使用的是CSS3的Media Query(媒体查询)实 ...

  5. 如何编写Vault插件扩展Vault Explorer的功能

    今天练习了一下Vault Explorer的扩展程序,基本上是Vault SDK中的HelloWord示例程序.如果你刚刚开始接触Vault的二次开发,希望对你有帮助. 开始之前,你需要安装Vault ...

  6. picasso总结

    public class UMDocApplication extends Application { private Picasso picasso = null; /**获取Picasso对象** ...

  7. Facebook开源动画库 POP-小实例

    实例1:图片视图跟着手在屏幕上的点改变大小 - (void)viewDidLoad { [super viewDidLoad]; //添加手势 UIPanGestureRecognizer *gest ...

  8. CGAffineTransform方法汇总

    CGAffineTransform是二维的仿射变换,可以进行位移,旋转,缩放,CGAffineTransform实际上是一个矩阵. CGAffineTransform { CGFloat a, b, ...

  9. iOS---检测系统通知开关状态

    if (iOS8) { //iOS8以上包含iOS8 if ([[UIApplication sharedApplication] currentUserNotificationSettings].t ...

  10. 【Android】保存Fragment切换状态

    前言 一般频繁切换Fragment会导致频繁的释放和创建,如果Fragment比较臃肿体验就非常不好了,这里分享一个方法. 声明 欢迎转载,但请保留文章原始出处:)  博客园:http://www.c ...