您的位置:首页 > 运维架构 > Linux

转:vim处理16进制jpg文件出错

2017-01-18 19:30 363 查看
在做数字图像处理时由于要读jpg文件信息,发现UltraEdit和vim读出的信息不同,其中UltraEdit读的信息头和网上查询得到的信息头相同,因此在查证此原因时发现了这篇文章


在linux下用vim打开jpg文件,使用%!xxd进行16进制显示时,文件头显示为”3f3f

3f3f 0011 0804”文件尾端显示为 “3f3f

0a”;而同样的操作在windows下,就显示为”ffd8 ffc0 0011 0804”和 “ffd9

0a”,这才是正确的jpeg文件头和文件尾标志。

很蹊跷 !

初时,我以为是jpeg在windows和linux下是不同的文件头,后来把jpg后缀去掉,就一个纯文件,现象依旧。考虑可能不是操作系统的差异了。

重新使用ghex打开jpeg数据查看,发现显示正常,为”ffd8 ffc0 0011

0804”和 “ffd9 0a”,正确。

估计应该是vim的问题了。

3f的ascii码是?,那表示vim对文件头、尾没有正常解析,是不是和vim解析文件时用的编码格式有关系呢?

打开.vimrc配置项,屏蔽掉下面这句话:

set fileencodings=utf-8,gb2312,gbk,gb18030,ucs-bom

再用vim打开jpeg文件,显示”ffd8 ffc0 0011 0804”和 “ffd9 0a”,

显示正确。

原来,为了支持识别和显示中文,我规定了vim的fileencodings,

当vim打开文件时,会使用规定的编码格式对数据进行解析,可惜jpeg的文件头FFD8、尾FFD9

不是任何一个中文的编码,vim找不到对应的中文字,就显示为??,即:3f3f。

至此,困惑全部打开。

原文:http://www.cnblogs.com/lidp/archive/2009/06/26/1697873.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  vim 图像处理 linux
相关文章推荐