- 浏览: 1008225 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (394)
- OSGI (14)
- 多线程 (10)
- 数据库 (30)
- J2ME (1)
- JAVA基础知识 (46)
- 引用包 (1)
- 设计模式 (7)
- 工作流 (2)
- Ubuntu (7)
- 搜索引擎 (6)
- QT (2)
- Ubuntu下编程 (1)
- 小程序 (2)
- UML (1)
- Servlet (10)
- spring (16)
- IM (12)
- 文档视频转为flash格式在线播放 (19)
- Maven (8)
- 远程调用 (2)
- PHPRPC (1)
- EXTJS学习 (2)
- Hibernate (16)
- 技术文章 (38)
- flex (5)
- 海量数据处理 (5)
- FTP (8)
- JS (10)
- Struts (1)
- hibernate search (13)
- JQuery (2)
- EMail (3)
- 算法 (4)
- SVN (7)
- JFreeChart (4)
- 面试 (4)
- 正规表达式 (2)
- 数据库性能优化 (10)
- JVM (6)
- Http Session Cookie (7)
- 网络 (12)
- Hadoop (2)
- 性能 (1)
最新评论
-
hy1235366:
能够随便也发一下,你退火算法程序使用的DistanceMatr ...
模拟退火算法总结(含例子)(转) -
梅强强:
感谢分享。。帮大忙了
swftools转换文件时线程堵塞问题的解决方法 -
wenlongsust:
openoffice和文件不在同一个服务器上,用过吗?
[JODConverter]word转pdf心得分享(转) -
2047699523:
如何在java Web项目中开发WebService接口htt ...
利用Java编写简单的WebService实例 -
abingpow:
唉,看起来好像很详细很不错的样子,可惜不是篇面向初学者的文章, ...
Spring与OSGi的整合(二)(转)
在程序中,文本文件经常用来存储标准的ASCII码文本,比如英文、加减乘除等号这些运算符号。文本文件也可能用于存储一些其他非ASCII字符,如基于GBK的简体中文,基于GIG5的繁体中文等等。在存储这些字符时需要正确指定文件的编码格式;而在读取这些文本文件时,有时候就需要自动判定文件的编码格式。 按照给定的字符集存储文本文件时,在文件的最开头的三个字节中就有可能存储着编码信息,所以,基本的原理就是只要读出文件前三个字节,判定这些字节的值,就可以得知其编码的格式。其实,如果项目运行的平台就是中文操作系统,如果这些文本文件在项目内产生,即开发人员可以控制文本的编码格式,只要判定两种常见的编码就可以了:GBK和UTF-8。由于中文Windows默认的编码是GBK,所以一般只要判定UTF-8编码格式。 对于UTF-8编码格式的文本文件,其前3个字节的值就是-17、-69、-65,所以,判定是否是UTF-8编码格式的代码片段如下:
java.io.File f=new java.io.File("待判定的文本文件名"); try{ java.io.InputStream ios=new java.io.FileInputStream(f); byte[] b=new byte[3]; ios.read(b); ios.close(); if(b[0]==-17&&b[1]==-69&&b[2]==-65) System.out.println(f.getName()+"编码为UTF-8"); else System.out.println(f.getName()+"可能是GBK"); }catch(Exception e){ e.printStackTrace(); }
上述代码只是简单判定了是否是UTF-8格式编码的文本文件,如果项目对要判定的文本文件编码不可控(比如用户上传的一些HTML、XML等文本),可以采用一个现成的开源项目:cpdetector,它所在的网址是:http://cpdetector.sourceforge.net/。它的类库很小,只有500K左右,利用该类库判定文本文件的代码如下:
import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import info.monitorenter.cpdetector.io.ASCIIDetector; import info.monitorenter.cpdetector.io.CodepageDetectorProxy; import info.monitorenter.cpdetector.io.JChardetFacade; import info.monitorenter.cpdetector.io.ParsingDetector; import info.monitorenter.cpdetector.io.UnicodeDetector; public class cpdetectorTest { public static void main(String[] args){ /*------------------------------------------------------------------------ detector是探测器,它把探测任务交给具体的探测实现类的实例完成。 cpDetector内置了一些常用的探测实现类,这些探测实现类的实例可以通过add方法 加进来,如ParsingDetector、 JChardetFacade、ASCIIDetector、UnicodeDetector。 detector按照“谁最先返回非空的探测结果,就以该结果为准”的原则返回探测到的 字符集编码。 --------------------------------------------------------------------------*/ CodepageDetectorProxy detector = CodepageDetectorProxy.getInstance(); /*------------------------------------------------------------------------- ParsingDetector可用于检查HTML、XML等文件或字符流的编码,构造方法中的参数用于 指示是否显示探测过程的详细信息,为false不显示。 ---------------------------------------------------------------------------*/ detector.add(new ParsingDetector(false)); /*-------------------------------------------------------------------------- JChardetFacade封装了由Mozilla组织提供的JChardet,它可以完成大多数文件的编码 测定。所以,一般有了这个探测器就可满足大多数项目的要求,如果你还不放心,可以 再多加几个探测器,比如下面的ASCIIDetector、UnicodeDetector等。 ---------------------------------------------------------------------------*/ detector.add(JChardetFacade.getInstance()); //ASCIIDetector用于ASCII编码测定 detector.add(ASCIIDetector.getInstance()); //UnicodeDetector用于Unicode家族编码的测定 detector.add(UnicodeDetector.getInstance()); java.nio.charset.Charset charset = null; File f=new File("D:\\test\\File\\PDFToFlex.mxml.txt"); try { charset = detector.detectCodepage(new BufferedInputStream(new FileInputStream(f)),100); } catch (Exception ex) {ex.printStackTrace();} if(charset!=null){ System.out.println(f.getName()+"编码是:"+charset.name()); }else{ System.out.println(f.getName()+"未知"); } } }
上面代码中的detector不仅可以用于探测文件的编码,也可以探测任意输入的文本流的编码,方法是调用其重载形式: charset=detector.detectCodepage(待测的文本输入流,测量该流所需的读入字节数);
上面的字节数由程序员指定,字节数越多,判定越准确,当然时间也花得越长。要注意,字节数的指定不能超过文本流的最大长度。
判定文件编码的具体应用举例:
属性文件(.properties)是Java程序中的常用文本存储方式,象STRUTS框架就是利用属性文件存储程序中的字符串资源。它的内容如下所示: #注释语句
属性名=属性值
读入属性文件的一般方法是:
FileInputStream ios=new FileInputStream("属性文件名");
Properties prop=new Properties();
prop.load(ios);
ios.close();
利用java.io.Properties的load方法读入属性文件虽然方便,但如果属性文件中有中文,在读入之后就会发现出现乱码现象。发生这个原因是load方法使用字节流读入文本,在读入后需要将字节流编码成为字符串,而它使用的编码是“iso-8859-1”,这个字符集是ASCII码字符集,不支持中文编码,所以这时需要使用显式的转码: String value=prop.getProperty("属性名");
String encValue=new String(value.getBytes("iso-8859-1"),"属性文件的实际编码");
在上面的代码中,属性文件的实际编码就可以利用上面的方法获得。当然,象这种属性文件是项目内部的,我们可以控制属性文件的编码格式,比如约定采用Windows内定的GBK,就直接利用"gbk"来转码,如果约定采用UTF-8,也可以是使用"UTF-8"直接转码。如果想灵活一些,做到自动探测编码,就可利用上面介绍的方法测定属性文件的编码,从而方便开发人员的工作。
发表评论
-
SWFTOOLS PDF2SWF 参数详解(转)
2012-01-08 16:35 2333SWFTools提供了一系列将各种文件转成swf的工具: ... -
swftools安装
2010-12-06 20:35 1983安装swftools工具时,在windows平台下是很简单的事 ... -
swftools转换文件时线程堵塞问题的解决方法
2010-11-26 09:55 5225在使用swftools工具作转换时,最需要注意的是对转换 ... -
pdf2swf fails to transform with the default options when the pdf are too large,
2010-11-25 14:10 4818if the pdf contains too many im ... -
[JODConverter]word转pdf心得分享(转)
2010-11-22 10:12 37764官方网站: http://www.artofsolving. ... -
flash 安全沙箱冲突
2010-10-28 20:46 7138下载flexpaper源码修改后做成swf阅读器,要加入待阅读 ... -
LInux下如何安装ffmpeg(转)
2010-10-11 13:55 1946终于装上了,把过程记录一下 首先要安装各种解码器 ... -
Flex Paper 源码编译
2010-10-02 09:05 8680FlexPaper是一个开源轻量级的在浏览器上显示各种文档的组 ... -
java使用jchardet检测文本文件(字节流)的编码方式(转)
2010-09-25 12:41 2310有时需要InputStreamReader(InputStre ... -
jodconverter纯文本文件转为pdf时中文问题解决方案
2010-09-25 12:31 5076jodconverter转换ms文件都 ... -
swftools使用注意
2010-09-15 10:00 2250swftools处理堵塞问题,请看文章:Process的wai ... -
mencoder环境搭建
2010-09-06 17:33 15471 到http://www.mplayerhq.hu/desi ... -
Mencoder常用视频转换参数(转)
2010-09-06 17:14 2896参数详解:1、-ofps 15 :帧速率15fps ... -
Mencoder常用视频转换参数(转)
2010-09-06 17:13 2140参数详解: 1、-ofps 15 ... -
利用ffmpeg+mencoder视频转换的总结(转)
2010-09-06 17:00 2774Youtube的成功,使得 ... -
ffmpeg+mencoder环境搭建和视频处理总结(转)
2010-09-06 16:54 4388ffmpeg+mencoder几乎可以完成目前基于web的播客 ... -
Mencoder转换flv参数详解(转)
2010-09-06 16:24 2595Mencoder简介: Mencoder是Mpl ... -
FLV视频转换的利器 - ffmpeg.exe和mencoder(转)
2010-09-06 15:07 6352文章1: 大家应该都知道Youtobe、Google ...
相关推荐
Java作为一种广泛使用的编程语言,提供了多种方式来判断文件或文本流的编码。以下是对标题和描述中所述知识点的详细解释: 1. **文件编码的概念**:文件编码指的是在文件中存储字符的方式。常见的文件编码包括ASCII...
总的来说,Java中判断文件或文本流编码的方法主要包括直接读取文件头字节进行比较和使用第三方库进行复杂检测。前者适用于有限的编码格式,后者则提供了更全面的解决方案,适用于各种场景,尤其是处理用户上传或不可...
本文将探讨如何使用Java进行文件编码格式的识别,主要介绍两种方法:一种是简单的UTF-8判断,另一种是使用开源库cpdetector。 首先,对于简单的UTF-8编码格式判断,我们可以直接读取文件的前三个字节来确定。UTF-8...
### Java程序判断文件编码的类型 #### 知识点概览 本文档旨在教导读者如何通过Java编程语言来判断文件...通过以上方法,我们可以有效地判断文件的编码类型,并据此进行相应的编码转换操作,以确保文本数据的正确处理。
如果没有发现'/0',则可以假设它是ASCII文本文件,但这并不能完全排除某些含有特殊编码(如UTF-8)的文本文件,因为这些编码可能会包含0字节,但仍然属于文本文件范畴。 另外,还可以使用更复杂的方法来判断,比如...
想到如下特征来识别汉字: 1. 如果第1位是0就不需要判断的,一定是ASCII字符。... 如果第1位是1开头的,第2位是0开头的,一定是GB编码。 3. 如果第1位是非1110开头的,则一定是GB编码。 4. 多做几个汉字判断。
Recognize类判定指定文本文件为UTF-8还是GBK编码格式。
下面将详细阐述文件编码、判定方法以及chardet库的相关知识点。 文件编码是用来表示文本字符的二进制表示方式,常见的有ASCII、ISO-8859-1、GB2312、GBK、Big5、UTF-8、UTF-16等。每种编码都有其特定的字符集和编码...
在讲义中,首先通过学生成绩的转换,引入了哈夫曼编码的概念,并且结合概率对判定树的效率进行了分析,然后逐步深入到哈夫曼树的定义、构造方法、特点,并以字符编码为例,展示了哈夫曼编码如何实现最优的编码效率。...
- **文件注释**:详细说明了每个函数的功能和使用方法,以及它们如何影响后续的编码过程。 ##### 3.3 image.c 文件 `image.c`文件实现了图像处理功能,包括图像的缩放、颜色空间转换等。 - **功能描述**:实现...
从压缩比的高低来判定,哈夫曼编码的唯一性说明这种编码文件的唯一性; 收获与体会 ------------- 1. Huffman 树的建立,编码,译码有了更深层次的理解。 2. 文件的打开,关闭,读入,输出语句比较熟悉了。 3. 对于...
One-Hot编码是将离散的特征转换为数值特征的技术,常用于文本特征提取和机器学习模型中。其原理是使用N位状态寄存器来对N个状态进行编码,每个状态都有它独立的寄存器位,并且在任意时候,其中只有一位有效。 One-...
哈夫曼树(Huffman Tree),也称为最优二叉树,是一种特殊的二叉树结构,...构建哈夫曼树的过程涉及到带权路径长度的计算以及最小堆的使用,是数据结构和算法领域中的重要概念,广泛应用于文本压缩、图像处理等领域。
本文将深入解析由给定文件中的代码片段实现的无符号整数表达式的判定方法,并对其工作原理、设计思路以及潜在的应用场景进行详尽的解释和分析。 #### 代码结构与功能解析 ##### 类定义与初始化 代码首先定义了一个...
总结来说,判定提交内容是否超过数据库长度时,需要考虑字符编码的问题,并且可能需要自定义函数来准确计算字符串的字符数。这在处理包含中文或其他非ASCII字符的多语言Web应用中尤为重要。同时,开发者还必须注意到...
【Seq2Seq自编码器模型】是深度学习领域中一种重要的序列到序列(Sequence-to-Sequence)学习模型,常用于自然语言处理任务如机器翻译、文本摘要和语音识别。该模型由编码器(Encoder)和解码器(Decoder)两部分...
encodeURIComponent 方法 将文本字符串编码为合法的通用资源标识符 (URI)组件。 Enumerator 对象 提供集合中的项的枚举。 相等运算符(==) 比较两个表达式,看是否相等。 Error 对象 包含在运行 JScript 代码时...