Linux先使用grep -r $'\xEF\xBB\xBF' * |grep .php 查看文件编码,然后是用vi命令打开文件,然后在使用:set nobomb,文件编码修改完成。
以下附有BOM的简单介绍:
Unicode规范中有一个BOM的概念。BOM——Byte Order Mark,就是字节序标记。在这里找到一段关于BOM的说明:
在UCS 编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输字符"ZERO WIDTH NO-BREAK SPACE"。这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little-Endian的。因此字符"ZERO WIDTH NO-BREAK SPACE"又被称作BOM。
UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式。字符"ZERO WIDTH NO-BREAK SPACE"的UTF-8编码是EF BB BF。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。
Windows就是使用BOM来标记文本文件的编码方式的。
另外unicode网站的FAQ-BOM详细介绍了BOM。官方的自然权威,不过是英文的,看起来比较费劲。
UTF-8编码的文件中,BOM占三个字节。如果用记事本把一个文本文件另存为UTF-8编码方式的话,用UE打开这个文件,切换到十六进制编辑状态就可以看到开头的FFFE了。这是个标识UTF-8编码文件的好办法,软件通过BOM来识别这个文件是否是UTF-8编码,很多软件还要求读入的文件必须带BOM。可是,还是有很多软件不能识别BOM。我在研究Firefox的时候就知道,在Firefox早期的版本里,扩展是不能有BOM的,不过Firefox 1.5以后的版本已经开始支持BOM了。现在又发现,PHP也不支持BOM。
PHP在设计时就没有考虑BOM的问题,也就是说他不会忽略UTF-8编码的文件开头BOM的那三个字符。由于必须在<?或者<?php后面的代码才会作为PHP代码执行,所以这三个字符将会直接输出。如果遇到header(),session(),cookie()等问题,将会导致乱码或显示白屏等问题.
常见编码的BOM UTF-8的BOM
UTF-8的BOM是三个字节:0xEF, 0xBB, 0xBF,这三个字节在UTF-8编码里是没有意义的。
UTF-8的BOM是不推荐使用的,但MS仍然在使用,因此导出UTF-8时,不加这三个字节,MS打开就会乱码。
utf-8的BOMutf-8的Big endian的BOM是:0xFE, 0xFF。
utf-8的Littal endian的BOM是: 0xFF, 0xFE。
GB18030的BOMGB18030的BOM是:0x81,0x31,0x95,0x33。
如果你遇见过这样的问题: 非法字符: \65279
今天可以帮你解决!
众所周知,在跨程序的工程中,统一编码是至关重要的,而目前最普遍的则是统一采用“utf8”编码方案。
但是在采用utf8方案的时候,请注意编辑器的自作聪明。
比如editplus。
原因就在于某些编辑器会往utf8文件中添加utf8标记(editplus称其为签名),它会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM),它的表示的是 Unicode 标记(BOM)。
因此要解决这个问题的关键就是把这个标记选项去掉。
首先用editplus打开这个文件,从Doucument菜单中选择Permanet Settings,有三个分类,分别是General, File, Tools.点击File,右边会有一项是 UTF-8 signature: 选择 always remove signature. 点击OK
中文版本的 editplus 下操作的菜单结构如下: 文档->参数设置->文件->UTF-8签名->总是移除签名->确定
这样就设置了UTF-8格式不需要在文件前面加标记。
最后把文件另存为utf-8格式就好了.
在程序中读取文件时做下判断,看是否需要去掉第一行的第一个char,代码如下:
InputStreamReader FS = new InputStreamReader(in, "UTF-8");
BufferedReader SR = new BufferedReader(FS); // 文件输入流为
String strLine = SR.readLine();
if (strLine.length()>1){
if ((int)strLine.charAt(0)==65279){
strLine=strLine.substring(1);
}
}
最近闲来无事,所以写了一个java的下载模块,稍微修改了一下弄成了无限下载。
首先是线程类:
package com.gzh.test; import java.io.BufferedInputStream; import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; import java.net.HttpURLConnection; import java.net.URL; public class DownloadThread extends Thread { private String url = null; private String file = null; private long offset = 0; private long length = 0; public DownloadThread(String url, String file, long offset, long length) { this.url = url; this.file = file; this.offset = offset; this.length = length; } @Override public void run() { try { HttpURLConnection conn = (HttpURLConnection) new URL(/blog_article/url/index.html) .openConnection(); conn.setRequestMethod("GET"); conn.setRequestProperty("RANGE", "bytes=" + this.offset + "-" + (this.offset + this.length - 1)); BufferedInputStream bis = new BufferedInputStream( conn.getInputStream()); byte[] buf = new byte[1024]; int bytesRead; while ((bytesRead = bis.read(buf, 0, buf.length)) != -1) { this.writeFile(file, offset, buf, bytesRead); this.offset += bytesRead; } } catch (IOException e) { e.printStackTrace(); } } public void writeFile(String fileName, long offset, byte[] bytes, int realLength) throws IOException { File file = new File(fileName); RandomAccessFile raf = new RandomAccessFile(file, "rw"); raf.seek(offset); raf.write(bytes, 0, realLength); raf.close(); } }
然后随便写一个类实现main():
while循环是个死循环,每隔10秒运行一次线程。
package com.gzh.test; import java.io.File; public class Main { public static void main(String[] args) { String url = "http://d2.eoemarket.com/upload/apps/2013/0607/148237/apks/07c73b70-9cbf-4a7f-eeb7-1f8b35e24cd1.apk"; int a = 0; while (true) { String file = "D:\\javaTest\\" + System.currentTimeMillis() + ".apk"; long offset = 0; long length = 0; new DownloadThread(url, file, offset, length).start(); try { Thread.sleep(15000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(a++); } } }
灰常无聊啊,只是希望初学者能够掌握简单的java单线程下载。最后推荐一款IT学习软件“IT视频排行榜”,绿色健康小清新呦,地址→http://www.eoemarket.com/soft/148237.html
聽
- 1 装配Hive
- 2 hive调度
- 3 hive装配
- 4 Hive运用
- 5 hive汉语
- 6 Hive 课程
- 1 十分难缠的signal 11 (SIGSEGV)
- 2 Can't create handler inside thread that has not called Looper.prepare() 错误有关问题
- 3 Dex Loader Unable to execute Multiple dex files define解决办法
- 4 解决 Google Play下载施用 "Google Play Store 已停止运行"
- 5 WAP网页获得用户的手机号码
- 6 如何判断Activity是否在运行
- 7 SlidingMenu+ViewPager兑现侧滑菜单效果
- 8 makeKeyAndVisible的功用
- 9 关于Unable to execute dex: Java heap space 解决方法
- 10 RelativeLayout设置居中对齐有关问题
- 1 播发声音文件AVAudioPlayer
- 2 改变银屏显示方式已经加载图片
- 3 2013-十-31 TCP/IP 协议簇
- 4 Java I/零 总体框架图
- 5 拿碗的铠甲勇者
- 6 女友可能出轨 想知道在QQ和别人的聊天记录
- 7 objective C中的字符串(3)
- 8 java.lang.ClassNotFoundException: Didn't find class "Activity" on path: /da
- 9 LG Optimus G Pro 相干
- 10 怎么创建对话框
- 1 Tiledmap编辑操作技巧
- 2 Andriod耗时操作的处置(音乐播放器欢迎界面)
- 3 BroadcastReceiver要领
- 4 power键跟音量键组合实现截图功能
- 5 疑惑为什么报错了
- 6 用 lipo 下令裁剪出需要的 architecture
- 7 实现默认文字统制的textview
- 8 视图切换的形式
- 9 深入viewgroup.onintercepttouchevent1点
- 10 MGTemplateEngine模版发动机
- 上一篇: java一个容易的下载功能分享
- 下一篇: 自动完成文本框(AutoCompleteTextView)的效能和用法
- Web开发
- Web前端
- HTML/CSS
- PHP
- ASP
- JavaScript
- vbScript
- Ajax
- 网页设计
- 跨浏览器开发
- 高性能WEB开发
- Web Service
- XML/SOAP
- CGI
- 数据库
- SQL
- MySQL
- Oracle技术
- Oracle管理
- Oracle开发
- Oracle面试
- Oracle Exception
- Sql Server
- Informix
- Sybase
- DB2
- Access
- VFP
- 数据仓库
- 高性能数据库开发
- 其他数据库
- 移动开发
- Android
- Iphone
- Windows Mobile
- Symbian
- BlackBerry
- QT开发
- Brew
- MeeGo
- 移动平台
- 移动软件开发
- 电信IT应用开发
- 移动应用
- 企业开发
- 企业信息化
- 行业应用
- GIS
- SAP
- Tivoli
- Lotus
- Exchange
- SharePoint
- 报表
- 嵌入开发
- WinCE
- 硬件开发
- 单片机
- 汇编语言
- 驱动开发
- Wireless
- VxWorks
- Java Web开发
- J2EE
- J2SE
- J2ME
- Java面试
- Java相关
- Eclipse
- Java Exception
- 应用服务器
- Apache
- IIS
- JBoss
- WebSphere
- Weblogic
- ColdFusion
- 研发管理
- 项目管理
- 开发过程
- 开发方法
- 软件设计
- 设计模式
- 软件架构设计
- 敏捷开发
- 微创软件开发
- CVS/SVN
- VSTS
- PowerDesigner
- Rational
- 软件测试
- C#
- ASP.NET
- .NET Framework
- VB Dotnet
- VC
- .NET分析设计
- .NET组件控件
- J#
- Delphi
- .NET报表
- LINQ
- .NET新技术
- .NET面试
- .NET相关
- DotNet Exception
- Linux/Unix
- Solaris
- AIX
- 多媒体/流媒体开发
- 多媒体设计
- 交互式开发
- Flash
- 图形/图像
- 图像工具使用
- Flex
- AutoCAD
- Silverlight
- C++
- C语言
- C++ Builder
- VB
- PB
- Ruby/Rails
- perl/python
- 编程
- 其他开发语言
- 网络通信
- Open API
- 信息/网络安全
- IBM云计算
- Paypal
- VOIP
- Google技术
- 人工智能
- 搜索引擎
- CUDA
- 综合
- 互联网
- 操作系统
- 开源软件
- 共享软件
- 系统运维
- 高性能WEB开发
- 高性能数据库开发
- 高性能计算
- 多核软件开发
- 数据结构与算法
- 游戏开发
- 云计算
- 网络设计维护
- 数码设备
- 电脑整机及配件
- 装机与升级
- 外设及办公设备
- 电脑硬件
- 交换机/路由器
- Windows
- Windows2000
- Windows xp
- Windows7
- Office
- VBA
- VC/MFC
- Delphi
- 软件培训
- IT认证
- Oracle认证考试
- 软件水平考试
- IT课程
- 计算机图书
- 计算机英语