- 浏览: 406811 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (325)
- 神经网络 (1)
- javascript (11)
- 数据结构 (2)
- 计算机图形学 (11)
- 模式识别 (1)
- 前端开发 (14)
- 机器学习 (11)
- ios开发 (50)
- Python (9)
- HTML5 (4)
- 计算机视觉 (9)
- 数字图像处理 (7)
- 架构设计 (19)
- 数据库设计 (9)
- 算法设计 (59)
- Java (37)
- 其他 (3)
- 游戏开发 (5)
- c++ (17)
- Linux (3)
- TCP/IP (2)
- Flex (41)
- 健康 (6)
- AI (2)
- 工具 (1)
- 数据挖掘 (1)
- 性能优化 (6)
- 综合 (2)
- 网络通信 (12)
- Android (2)
- UML (3)
- 软件设计 (11)
- 编程经验 (7)
- J2EE (1)
- 多媒体技术 (3)
- 数学 (7)
- php (4)
- 设计 (1)
- CS (2)
- 计算机理论 (1)
- 信息安全 (1)
最新评论
-
ahead_zhan:
good good good
flex3控件_ModuleLoader -
lonerzf:
好样的。非常感谢楼主
OpenCV视频教程整理 -
lonerzf:
好样的。谢谢~
OpenCV视频教程整理 -
coding1688:
博主说的不错,我在实现瀑布流布局时也用的masonry插件,有 ...
Javascript 瀑布流式布局及其动态效果的实现 -
snowolf:
除非玩游戏,不然没啥win的事情,或者用win的银行客户端,通 ...
macbook安装操作系统的机理分析
参考:http://www.cnblogs.com/lion.net/archive/2005/02/24/108395.html
一)需求
很多情况下我们需要知道字节流的编码,比如
1) 使用编辑器打开文本文件的时候,编辑器需要识别文本文件的各种编码
2) 上传文件后,分析上传文件字节流需要知道它的编码
3) 读取某个web页面的源代码,并要输出时,需要知道正确的编码才能输出正确的内容
二)探讨
最初和同事讨论如何获取文件/流/字节是否是utf8编码时,发现c#并没有直接的函数,但在SDK中发现UTF8的开头三个字节是“0xEF 0xBB 0xBF”(称为BOM--Byte Order Mark),Unicode文件的开头两个字节是“0xFF 0xFE”,UTF16SmallEndian文件的开头两个字节是“0xFE 0xFF”,于是写了一个简单的函数去解决,由于没有时间做足够的测试,总觉得会有问题.......
///<summary> /// 解析 byte 数组是什么样的编码 /// </summary> /// <param name="enc">要传回的编码类型</param> /// <param name="buff">要解析的byte数组</param> /// <remarks> /// 以下示例演示了如何使用 <see cref="GetEncoding"/>方法 /// <code> /// if(Request.Files.Count!=0) /// { /// //获取上传的文件 /// HttpPostedFile pf = Request.Files[0]; /// int fileLength = (int)pf.InputStream.Length; /// //存储上传文件的字节数组 /// byte[] buff = new byte[fileLength]; /// pf.InputStream.Read(buff,0,fileLength); /// pf.InputStream.Close(); /// Encoding enc = null; /// GetEncoding(out enc,buff); /// Response.Write("编码:"+enc.EncodingName); /// Response.Write("<br />"); /// Response.Write("内容:"+enc.GetString(buff)); /// } /// </code> /// </remarks> void GetEncoding(out Encoding enc,byte[] buff) { bool flag = false; //用于测试的编码 byte[] testencbuff = new byte[0]; int fileLength = buff.Length; //判断上传的文件的编码是否是Unicode enc = Encoding.Unicode; testencbuff = enc.GetPreamble(); if(fileLength>testencbuff.Length && testencbuff[0] == buff[0] && testencbuff[1]==buff[1]) { flag = true; } //判断上传的文件的编码是否是UTF8 if(!flag) { enc = Encoding.UTF8; testencbuff = enc.GetPreamble(); if(fileLength>testencbuff.Length && testencbuff[0] == buff[0] && testencbuff[1]==buff[1] && testencbuff[2]==buff[2]) { flag = true; } } //判断上传的文件的编码是否是BigEndianUnicode if(!flag) { enc = Encoding.BigEndianUnicode; testencbuff = enc.GetPreamble(); if(fileLength>testencbuff.Length && testencbuff[0] == buff[0] && testencbuff[1]==buff[1]) { flag = true; } } if(!flag) { enc = Encoding.Default; } }
问题出现了,第二天同事告诉我,不是所有的UTF8编码的文件都有BOM信息,那如何解决呢?他先找到了答案 字节流编码获取原来这么复杂 (我也在google和baidu上搜索过,发现C#并没有很好的解决方案)
以下是两篇相关解决问题的文章(java)
http://dev.csdn.net/Develop/article/10/10961.shtm
http://dev.csdn.net/Develop/article/10/10962.shtm
java代码很容易移植到.NET上,那我就来为大家铺条路...
代码有2400多行,请在这里下载代码:下载代码
在移植代码的过程中感谢以下朋友的参与:
playyuer
<script type="text/javascript"></script>
发表评论
-
【转】Linux tcpdump命令详解
2013-12-11 09:54 891转自:http://www.cnblogs.co ... -
常用命令行
2013-12-09 14:37 0Linux 本地抓包: sudo tcpdump -t - ... -
多种加密算法实现(JAVA)
2013-10-24 09:18 1615有短句“Sun Yat-sen University is ... -
提高在Xcode上的工作效率
2013-08-31 11:05 1095转自:http://liuminqian.github.io ... -
【转】HTTP协议详解
2013-06-07 12:20 772转自:http://www.cnblogs.com/Tank ... -
IPC机制和实现
2013-05-21 19:04 1183(1)管道(Pipe):管道可用于具有亲缘关系进程间的通信, ... -
XMPP协议的原理介绍
2013-05-08 17:19 634转自:http://blog.csdn.net/ ... -
断点续传的原理
2013-05-07 19:53 826转自:http://www.ibm.com/develope ... -
微信协议研究
2013-05-05 23:30 11471参考:http://blog.renren.com/blog ... -
http 协议学习文档(英文)
2013-02-27 16:44 723http 协议学习 Hypertext Transf ... -
HTTP Response Header Fields
2013-02-27 16:10 1013当浏览器发送了HTTP请求之后,服务器就会通过一个HTTP ... -
HBASE压缩算法-SNAPPY算法安装
2012-11-19 17:46 2853转自:http://www.cnblogs.com/s ... -
《JAVA与模式》之调停者模式
2012-06-21 20:06 628参考:http://www.cnblo ... -
Java 线程池的原理与实现
2011-10-23 15:48 690参考: http://www.blogjava.ne ... -
浅谈AMF协议的优与劣
2011-06-03 16:33 1150参考:http://www.router.net.cn/Art ... -
Java中读取字节流并按指定编码转换成字符串的方法
2011-05-21 11:22 1447参考: http://www.blogjava.net/pen ... -
使用Java.util.zip下的zipOutStream和zipInStream对字节流进行压缩和解压缩
2011-05-21 10:08 1713参考:http://www.blogjava.net/ushe ... -
ActionScript与Java类型对应表
2011-05-21 09:46 1027当你使用AMF格式进行RemoteObject 调用时,肯定会 ... -
基于red5的在线视频录制实例和详细注释
2011-05-14 23:03 1574参考:http://www.ccvita.com/130.ht ... -
Java 中几种查找算法
2011-05-12 10:31 1462顺序查找说明:顺序查找适合于存储结构为顺序存储或链接存储的线性 ...
相关推荐
本文将详细讲解如何在Visual Studio .NET环境下使用不同的类来获取文件流中的字节编码。 首先,我们需要理解什么是字节编码。字节编码是将字符转换为二进制(字节)表示的方法,如ASCII、UTF-8、UTF-16等。在.NET中...
// 获取文件的字节流 byte[] fileBytes = File.ReadAllBytes("EncodeGet.cs"); // 使用Encoding_guesser工具或方法尝试识别编码 Encoding guessedEncoding = EncodingGuess(fileBytes); // 这里需要自定义编码识别...
- **通过文件头部标识判断**:很多编码格式会在文件开头包含特定的字节序,如UTF-8的BOM(Byte Order Mark)或GBK的两个特定字节。可以读取文件的前几个字节来识别编码。 - **使用工具库**:Java和Android中有多种...
字节流处理的是单个字节的数据,而字符流处理的是Unicode编码的字符。 首先,IO流分为输入流(Input Stream)和输出流(Output Stream)。输入流是从外部数据源(如文件、网络连接等)读取数据到内存,而输出流则是...
在C++编程中,文件的解码与编码是至关重要的概念,它们涉及到数据的存储、传输和处理。...对于初学者来说,从简单的文本文件读写开始,逐步接触更复杂的二进制数据处理和编码转换,是很好的学习路径。
3. 获取编码结果:通过`x264_nal_size`和`x264_nal_get`获取编码后的字节流,这些字节流可以直接写入文件或发送网络。 4. 关闭编码器:在完成所有编码工作后,记得调用`x264_encoder_close`来释放资源。 在实际应用...
2. 序列化XML文档:使用`TransformerFactory`和`Transformer`将XML文档转换为字节流。 3. 输出到流:将生成的字节流写入到目标输出流。 描述中的“简单快捷”可能是指这些操作可以被封装在简洁的代码片段中,例如...
例如,要将ASCII字符串转换为UCS2,可以使用`Encoding.ASCII.GetBytes`方法获取ASCII编码的字节数组,然后用`Encoding.BigEndianUnicode.GetString`将这个字节数组转换为UCS2字符串。相反,将UCS2转换为ASCII,需要...
《深入理解Java中的cpdetector:自动检测字符流文件编码》 在Java开发中,处理文本文件时,我们经常需要知道文件的编码格式,以便正确读取和解析文件内容。"cpdetector"是一个实用的工具库,它能自动检测文本文件的...
总的来说,Qt提供了强大的工具来处理各种编码的文本文件,无论是简单的文本读写还是复杂的富文本操作。正确理解和使用这些工具,可以确保你的程序在处理多语言或多编码环境时表现得游刃有余。在开发过程中,始终关注...
字节流和字符串之间的转换通常是通过字符编码完成的,如UTF-8。在Java中,可以使用InputStreamReader和BufferedReader将InputStream转换为字符流,然后读取字符串。反之,使用OutputStreamWriter和BufferedWriter将...
这两个类分别用于将字节流转换为字符流和反之。例如,如果你需要从一个使用UTF-8编码的文件读取数据,你可以这样创建`InputStreamReader`: ```java InputStream in = new FileInputStream("file.txt"); ...
这种编码方式能够解决数字传输中的直流平衡问题,也就是说它能够平衡数据流中的"1"和"0"的数量,从而消除长串相同位的出现,避免由于过量的连续位导致的时钟漂移问题。同时,它还能保证数据流中始终有足够的边沿来...
示例代码中的`getHtml`函数展示了如何使用`WebClient`的`DownloadData`方法下载网页的字节流,然后使用`Encoding.Default.GetString`将字节流转换为字符串,从而获取到网页的源代码。 ### 2. 使用MSXML2.XMLHTTP...
1. **字符编码与字节流**:在计算机系统中,字符和字节的对应关系是由字符编码(如ASCII、UTF-8、GBK等)定义的。不同的编码方式会导致相同的字符表示为不同的字节序列,如果在发送端和接收端使用了不同的编码方式,...
Java的输入/输出(IO)流是...这个简单的例子展示了Java IO流的基本用法,但在实际项目中,根据需求可能会涉及更复杂的流操作,如转换流、对象流、过滤流等。理解并熟练掌握这些基础,将有助于解决各种IO相关的问题。
字符流处理的是Unicode编码的字符,而字节流则处理基本的8位字节数据。这两类流又各自分为输入流(Input Stream)和输出流(Output Stream),分别用于数据的读取和写入。 1. 字节流: - InputStream和...
例如,了解何时使用字节流和字符流,何时需要使用缓冲流,以及如何处理编码问题等。 最后,BIO( Blocking I/O)、NIO(Non-blocking I/O)和AIO(Asynchronous I/O)是Java并发API中关于IO的三种模式。BIO是传统的...
InputStreamReader和OutputStreamWriter是字节流与字符流之间的桥梁,允许在不同字符编码之间转换。 3. 对象序列化与反序列化:ObjectInputStream和ObjectOutputStream允许我们将Java对象写入流中,然后在其他地方...