我们正在从源系统中接收一个zip文件。这是一个.zip文件。

我们正在使用unzip命令在Linux中将其解压缩。 .zip文件包含一个.dat文件,该文件包含相同宽度的行。确切地说,这是一个固定宽度的文件。但是在解压缩时,多余的字符会添加到.dat文件中,这会导致不同行的长度有所不同。

unzip edw_ord_extr_3x_SIQP_20181021.182305.zip

这将产生edw_ord_extr_3x_SIQP_20181021.182305.dat

grep -P -n -a "[\x00-\x1F]" edw_ord_extr_3x_SIQP_20181021.182305.dat | wc -l

467

这表明按照设计,在467行中有特殊字符。

我已经在vi中打开bad.dat文件,发现特殊字符。

例如:

@^@^R^@

^A^@

<90>^@^@^@

grep -P -n -a "[\x00-\x1F]" edw_ord_extr_3x_SIQP_20181021.182305.dat > bad.dat

awk '{ print length($0) }' bad.dat | sort | uniq

2090

2091

2092

2219

2220

2221

2222

2223

2224

2225

2219是正确的长度。

这意味着,特殊字符的存在可以增加字符数或减少字符数,或者不改变字符数。

我们通过用?替换所有特殊字符来进行变通。perl -pe 's/[\000-\011]|[\013-\037]|[\177-\377]/?/g' edw_ord_extr_3x_SIQP_20181021.182305.dat > clean.dat

到目前为止,问题已解决。

但是我需要了解为什么在执行解压缩命令时插入特殊字符?

为什么特殊字符会改变行长?我的理解是特殊字符被认为是1个字符,但在这种情况下不是。

文件详细信息。

file -bi edw_ord_extr_3x_SIQP_20181021.182305.dat

application/octet-stream; charset=binary

我已在notepad ++中打开bad.dat文件,并能够看到特殊字符,例如SOH,BEL,NUL

十六进制转储示例

000dff20 20 54 31 20 20 30 31 20 20 20 20 20 20 20 20 20 | T1 01 |

000e07d0 20 20 54 31 20 20 30 31 20 20 20 20 20 20 20 20 | T1 01 |

000e0e10 30 2e 30 30 30 30 30 30 58 5a 01 3f 00 00 00 00 |0.000000XZ.?....|

000e3340 20 30 39 30 30 20 20 54 31 20 20 30 31 20 20 20 | 0900 T1 01 |

000e4d60 31 20 20 30 31 20 20 20 20 20 20 20 20 20 20 20 |1 01 |

000e78d0 30 30 20 20 54 31 20 20 30 31 20 20 20 20 20 20 |00 T1 01 |

000e7f20 00 00 01 00 52 4f 3f 20 20 20 20 46 41 4c 4c 42 |....RO? FALLB|

000e8180 37 30 30 20 20 54 31 20 20 30 31 20 20 20 20 20 |700 T1 01 |

000e87d0 00 00 00 01 00 52 4f 3f 20 20 20 20 46 41 4c 4c |.....RO? FALL|

linux多字节错误,在Linux中解压缩时遇到多字节字符的问题相关推荐

  1. linux rar加压_Linux环境中解压缩rar文件

    Linux系统中默认没法解压rar文件,之前碰到过zip文件,可以使用zip和unzip来搞定,虽然也不是默认的,但是安装起来比较方便,直接yum就OK了,今天来看一下如何安装rar解压工具. 下图中 ...

  2. 配置linux内核错误,配置Linux内核(menuconfig):重定义错误

    我有Linux内核3.8.0源代码,当尝试使用 menuconfig 选项(使用"make menuconfig" terminal命令)配置它时,我得到以下错误列表: DALEK ...

  3. linux tee错误日志,linux tee命令使用详解教程

    在执行Linux命令时,我们既想把输出保存到文件中,又想在屏幕上看到输出内容,就可以使用tee命令.接下来是小编为大家收集的linux tee 命令使用详解教程,希望能帮到大家. linux tee ...

  4. linux定时器错误使用,linux下定时器的使用

    Linux下定时器的使用主要用到两个函数:setitimer()和getitimer(); 注意:setitimer()一个进程中只能有一个,下一个会覆盖前一个的定时. Linux系统给每个进程提供了 ...

  5. linux 协议错误,在linux客户机上:协议错误,Vagrant无法挂载同步的文件夹_vagrant_开发99编程知识库...

    使用一個 Windows 主機和一個運行在in的Linux客戶機使用同步文件夾,我有一個奇怪的問題. 在第一個引導( 或者在 vagrant destroy 之後) 中,項目文件夾掛載到/vagran ...

  6. linux 忽略错误信息,linux – 由于文件模式错误而忽略/etc/logrotate.conf

    我如何做logrotate,当我做logrotate时,我看不出任何效果 root@me-Latitude-E5550:/etc/logrotate.d# cd .. root@me-Latitude ...

  7. linux的android工作室,Android工作室在启动时抛出错误,linux机器

    我只是将我的Android Studio从1.5升级到2.3,我只是解压缩文件夹并复制到下载文件夹中,现在当我启动android studio时,我收到了此消息:Android工作室在启动时抛出错误, ...

  8. linux里怎样压缩文件,如何在Linux中解压缩文件

    ZIP是最广泛使用的存档文件格式,支持无损数据压缩. ZIP文件是一个数据容器,其中包含一个或多个压缩文件或目录. 在本教程中,我们将说明如何使用unzip命令通过命令行在Linux系统中解压缩文件. ...

  9. linux ftp 550 下载,linux ftp服务器上传文件夹时提示550错误问题解决方法

    linux ftp服务器上传文件夹时提示550错误问题解决方法 标签: linux ftp服务器 550 中文文件夹上传错误 问题 分类: 计算机 2010-11-06 22:47 前几天在实验室搭配 ...

最新文章

  1. INADDR_ANY的理解
  2. 开源阿牛图像处理实验室
  3. P5004-专心OI - 跳房子【dp,矩阵乘法】
  4. java实现回文验证_LeetCode 精选 TOP 面试题(Java 实现)—— 验证回文串
  5. c语言putchar_C语言实现变色的心!连机器都会变心,呵,男人!
  6. (9)verilog语言编写SPI接收
  7. Linux工作笔记024---Centos7 下查看本机公网IP
  8. WPF之Binding基础三 Binding的路径Path
  9. mysql怎么判断2个时间戳为同一天_php如何判断两个时间戳是一天
  10. Monkey命令相关总结
  11. 会声会影滤镜特效教程之气泡滤镜
  12. win10任务栏透明_生命在于折腾,用三个小软件美化你的Win10桌面
  13. mac 外接键盘让 Home End 键生效
  14. 如何在Mac设置开机自启程序项,教程在这!
  15. 探索硅谷奇迹的本质--周末荐书之《硅谷之谜》
  16. 人工智能伦理分论坛的报告
  17. 商业智能BI能做什么
  18. python编程视频剪辑_专治爱剪辑的片头片尾的脚本(Python)
  19. Python爬虫简单运用爬取代理IP
  20. win10系统删除右键菜单新建中多余选项的解决方案

热门文章

  1. Android拍照相册裁剪封装
  2. 在ListView中实现button功能
  3. 解决android studio编译的速度慢,安装apk过慢的问题
  4. mysql白名单ip通配符
  5. 讲真,这两款idea插件,能治愈你英语不好的病
  6. File System | Debug | 如何查看文件挂载的分区以及分区大小
  7. Button控件的使用方法
  8. C# 把时间转为秒_Python基础学习笔记(六)日期与时间
  9. mysql中utf8和utf8mb4的详解用法与区别
  10. 计算机专业英语完形填空,英语专业四级完形填空练习附答案