笔者测试SPEC14的workload的时候,需要自定义workload,又需要在Windows和Linux平台上都要测试,所以就遇到了这么个问题:测试工具报错,但是报出来的错误信息又跟错误对不上。

工具没问题,不跨平台就没问题,所以首先怀疑跨平台的文件是不是有什么不一样。

使用notepad++打开导出的workload文件,发现Linux平台下和Windows平台下的长的不一样。

使用notepad++的状态栏的功能,可以快速转换这两种换行符。

或者遵循下面的步骤:

For a single file you can use Notepad++ replace utility:

  • Go to Search -> Replace (or ctrl-h)

  • In the dialog box select "Extended" search mode
  • Set "Find What" to: \r\n
  • Set "Replace With" to: \n
  • Click "Replace All"

然而,问题并没有解决,还是报错。

再Linux下使用cat查看两个文件,发现有些不一样:

两个文件的大小也不同。Notepad++里看上去一模一样的两个文件,居然大小差了整整一倍多。

使用cat的-v开关,可以查看打印不出来的字符,于是发现了玄机。

-v, --show-nonprinting
              use ^ and M- notation, except for LFD and TAB

可以看到,windows平台下导出的spec14的workload file里,包含了很多的垃圾字符。

查了一下,这种前面带脱字符(^)后面带个其他字符的字符,叫做caret notation。是ASCII中的对控制字符的标识法。

在workload file中出现这么多脱字符符号,是完全没有意义的,这个应该就个是跨平台的bug。

由于其在Windows平台下的工具下(notepad, notepad++)完全不可见,而Linux平台下的工具“cat -v”才能看到它们,排查起来真是非常的讨厌。

往后跨平台的东西,这种垃圾字符的问题大家要小心。

参考资料

============

How to replace crlf with lf in a single file

https://stackoverflow.com/questions/27810758/how-to-replace-crlf-with-lf-in-a-single-file

Caret notation

https://en.wikipedia.org/wiki/Caret_notation

记一次错误排查,主要问题是跨平台文件中换行符(CRLF, LF)和垃圾字符( Caret Notation)的更多相关文章

  1. 【java】java下载文件中换行符 在windows和linux下通用的

    请使用: public static final String FILE_CONTENT_SPLIT_MARK = "\r\n"; 注意 不是"\n\r",顺序 ...

  2. Linux文件和windows文件在 换行符的区别

    Linux或Unix文件,和windows文件,在来回处理时,如果不注意 换行符的区别,可能导致程序错误!!!深刻的教训.... 在早期的打印机时代,开始新的一行要占用两个字符的时间.如果到了一行的结 ...

  3. python处理文件的换行符

    我们知道在Windows平台下的换行符是\r\n,而在linux下的换行符是\n.现在写一个简单程序来测试python是如何处理这些换行符的. 准备文件data.txt,该文件在Windows平台下编 ...

  4. ****使用ftp软件上传下载php文件时换行符丢失bug

    在使用ftp软件上传下载php源文件时,我们偶尔会发现在本地windows下notepad++编辑器写好的php文件,在使用ftp上传到linux服务器后,php文件的换行符全部丢失了,导致php文件 ...

  5. python tips:文件读取——换行符的问题

    问题:在windows系统中,换行的符号是'\r\n'.python在读文件的时候为了系统兼容,会默认把'\r','n','\r\n'都视作换行.但是在windows文件中,可能在同一行中同时存在'\ ...

  6. C语言中以文本方式读写文件时换行符转换的注意事项

    我们知道在UNIX下是没有回车符(\r)的,只有换行符(\n),而C语言诞生于UNIX(Linux即面向开源的UNIX,Mac OS也是UNIX发展而来的,而Windows是从MS-DOS发展而来,与 ...

  7. windows下建立文件的换行符^M导致linux下的shell脚本执行错误的解决方式

    常常在windows下编辑的文件远程传送到linux下的时候每行末尾都会出现^M.这将导致shell脚本执行错误,主要是由于dos下的编辑器和linux下的编辑器对文件末行的回车符处理不一致导致. 主 ...

  8. log4j+AOP 记录错误日志信息到文件中

    AOP 采用异常通知切入,把指定包的异常记录到日志文件. 先看log4j.properties ,控制台输出的是普通信息, 文件输出的是异常信息. log4j.rootLogger=DEBUG, Co ...

  9. hive错误排查一:hive中执行 drop table命令卡住,删除表不成功

    起因 公司用的AWS EMR上的hive,突然不能删除表了. 经过 分析来看,估计是元数据那块出了问题.从元数据入手,元数据存在mysql的hive数据库中 直接使用hive配置文件hive-site ...

随机推荐

  1. java中级,知识点归纳(一)

    一.接口和抽象类的区别 抽象类中可以含有构造方法,而接口内不能有. 抽象类中可以有普通成员变量,而接口中不能有. 抽象类中可以包含非抽象的普通方法,而接口中所有方法必须是抽象的,不能有非抽象的普通方法 ...

  2. Lucene搜索/索引过程笔记

    lucene索引文档过程: > 初始化IndexWriter > 构建Document > 调用IndexWriter.addDocument执行写入 > 初始化Documen ...

  3. Android 主题、样式

    样式是针对View的,比如TextView.Button等控件,主题是针对Activity.整个APP的. 样式.主题是多种属性的集合,类似于网页中的CSS样式,可以让设计与内容分离,并且可以继承.复 ...

  4. 图解Java数据结构之单链表

    本篇文章介绍数据结构中的单链表. 链表(Linked List)介绍 链表可分为三类: 单链表 双向链表 循环列表 下面具体分析三个链表的应用. 单链表 链表是有序的列表,它在内存中存储方式如下: 虽 ...

  5. jQuery基础的动画里面的回调函数

    <style> *{margin:0; padding:0;} #target{ border-radius:10px; background:#eee; } .fade{/*动画起始状态 ...

  6. sparkSQL中的example学习(2)

    UserDefinedUntypedAggregate.scala(默认返回类型为空,不能更改) import org.apache.spark.sql.{Row, SparkSession} imp ...

  7. Odoo10学习笔记三:模型(结构化的应用数据)、视图(用户界面设计)

    转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/11189263.html 一:模型 [Odoo中,一切皆模型,连视图都是模型.Odoo将各种数据,如:权限数据 ...

  8. 使用rider做为unity的代码编辑器

    使用Rider做的编写Unity代码的IDE,记录一些与VS不相同的笔记 安装和设置方法: 我使用Rider 2019.1 + Unity3D 2018.3.4,在安装完Rider之后,在Unity中 ...

  9. pytest_前置后置

    今天总结下pytest,pytest简直就是python自动化中的高富帅,各种操作,哈哈 这次总结主要涉及到了以下几点: 1.unittest中的setUp.tearDown.setUpClass.t ...

  10. SQLAlchemy(3)

    一. SQLAlchemy 介绍 SQLAlchemy是一个基于Python实现的ORM框架.该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然后使 ...