登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

SeaRiver Blog

实力才是你一生最好的依靠!

 
 
 

日志

 
 

回车符和二进制引发的问题   

2008-12-30 10:30:00|  分类: shell |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
 

      在博文之前,先介绍一下文本模式和二进制模式的差别,两者主要是在回车换行的处理上,不同系统对回车换行的处理不一致。

      CR:  Carriage Return,   0X0D,   “\r”
      LF:  Line Feed,         0X0A,   “\n”

      Dos和Windows采用回车+换行(CR+LF)表示下一行
      UNIX采用换行符 (LF)表示下一行
      MAC机采用回车符(CR)表示下一行

      最近一直在开发湖北现场的割接工具,工具的执行流程贯穿到系统多个模块。和同事一起配合,同事开发的工具从现场的系统A中将数据导出到文本,然后由我的工具来将这些文本导入到现场的项目B中,也就是我们常说的数据割接,原因是项目升级,运营商已经商用的数据需要在新平台上继续使用。

      开发环境:SUSE Linux + Oracle

      测试环境:HP + Oracle

      FTP上传工具:FlashFXP

      注:在windows下编写完程序后FTP至SUSE或HP下进行调试和测试

      开发自测完,代码提交CC,书写操作手册,自测完毕工具打包,程序的整个流程都按照需求描述成功走完,并能顺利将各个流程连贯起来。以为这次应该是没问题的,拿到现场应该是能顺利进行使用的,但没预料,还没发到现场,在测试部测试这一环节就出现了问题,本定于昨天早上8:30发到现场,但由于测试没有通过,顶着现场和领导们的压力,拉上我师兄,昨天一整天陪我在测试部整代码,反复调试和测试。终于在下午5点钟找到问题的根源:

       windows下的文本文件是的换行处理是采用回车+换行(0D0A)的方式,linux下的文本文件的换行处理是采用换行(0A)的方式。在windows本地通过二进制方式从windows xp上传FTP到suse liunx后,windows下的回车换行符"\r\n"到了suse linux下并没有变为linux下的换行符"\n",也就是文本文件以二进制FTP到liunx下时,在文本记录中每行末尾追加了"\r\n",而通常如果以ASCII文本方式上传到suse linux后,文本每行的"\r"在suse会过滤掉的。于是部署在suse linux上的shell脚本在调用sqlldr函数将上传后的文本导入到系统B中,sqlldr总是提示字段值过长的异常信息,显然文本数据没有导入成功,因为oracle表中的字段定义为char(14),而上传后的文本文件的最后一个字段本来是14位,但加了"\r\n"后就变为16位。于是针对这个文本字段sqlldr到oracle时就会提示字段过长而插入不成功了。问题定位后,转而将文件以ASCII方式FTP至服务器上后,程序运行完全正常,问题解决。
      同时测试发现,通过jsp流从windows上传文本文件到suse linux上时,文本文件中的"\r\n"到suse上后还是存在"\r\n",也没有转换为"\n"。

 

原文: http://www.blogjava.net/cheneyfree/archive/2008/03/27/189113.html

  评论这张
 
阅读(1030)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018