挖井

类库大魔王的挖井日记

挖一口属于自己的井


这算不算乌龙

  有个纠结了几个月的问题,同样的文件,在我的程序里打开后显示的换行符和其他程序显示的不一样!一直想不通其中的原因,总之我是没怀疑其他软件会出错,因为基本上所有其他的软件表现是一样的,只有我的程序跟它们不一样。
  今天又纠结起来了,于是一狠心,准备全盘照抄CodeLite的源代码,用Beyond Compare合并了绝大部分代码,最后发现,问题仍然存在。于是我不再怀疑编辑核心的问题,准备从其他地方着手分析。比较有嫌疑的是文件读取的部分,我的做法是用Lua将整个文件使用*a参数全部读出,然后用ICU将其从系统默认编码转换成UTF-8,再将这UTF-8的字符串传给Scintilla显示。我猜测会不会这个转换编码的过程把换行符处理过了。于是再单独的Lua环境中测试了一下,发现是没有处理的,其实稍微想想就知道,这应该是不会变的。既然确认转换编码不会影响这个,那么我就再将焦点往前移,看看读出的文件的原始内容是什么。将读出的内容转换成16进制打出来,发现我的程序确实是按照原样显示的。但是Notepad++/CodeLite/Code::Blocks甚至VS都将一个\r\n处理成了\r\r\n,会多显示空行。这是让我有点迷惑的,为什么就只有我的程序是照文件的原样显示的?
  最后还是没有得出确切的结论,据我的猜测,是在文件读取时的方式引起的区别,文本类型的方式在某种读取方式下会多插入换行符?这个可能是存在的,不过我觉得太无趣了,不玩了!

本文地址:

https://minidump.info/blog/2010/06/e8-bf-99-e7-ae-97-e4-b8-8d-e7-ae-97-e4-b9-8c-e9-be-99/

上一篇

发现QT Animation Framework

  昨天在看QT的examples和demos的时候,猛然发现一组animation framework的示例,看了一下居然就是我一直在纠结在寻找的如何用QT做出那些酷炫界面的方法。话说其实之前也不时地翻一下QT的这些demo的,怎么就没发现呢!  看了一下程序的运行效果和代码,并配置着读了一...…

Qt 全文阅读
下一篇

基本完成context视图

  把ctags封装了一把,其实是CodeLite中的codelite_indexer,因为它已经把ctags提取出来了,不过是5.6版本,又对C++部分做了些修改,不过我不清楚这些修改有什么作用。有点奇怪的是,如果在Lua中用的话,只能提取一次tags,再试图提取tags的话会出错,就我现在...…

CodingStudio 全文阅读