特殊字元^M引起的資料匯入問題

oxoxooxx發表於2011-01-20

問題:特殊字元^M引起的資料匯入問題:
問題描述:
在完成需求時需要透過系統入口網站上傳原始資料,在到生產環境登入ftp下載資料.一次在從ftp下載下來資料,使用load匯入資料庫的過程後,發現匯入的資料與檔案中的資料不一致,
欄位被擷取了.
使用命令:cat -v source.txt 檢視檔案發現每行記錄後有一個特殊字元^M(經查該字元可透過ctrl+v+m輸入),
使用命令:sed 's/^M//g' source.txt 替換掉^M字元,再次匯入,成功.

問題分析:
關於使用ftp傳輸檔案的兩種方式:binary ascii
binary:以二進位制位元流傳輸檔案,保留了原檔案中的所有所以字元資訊
ascii:以ascii碼傳輸的時候,會在原系統還目標系統做相應的字元轉換
將回車換行轉換為本機的回車換行->
unix:n
windows:rn
mac:r
而上面的^M對應的是windows下dos格式的r,即十六進位制的0D,因為門戶的ftp上傳功能使用的是binary傳輸模式,所以系統沒有對windows下的回車換行進行替換,
到unix平臺就會在每行記錄後多出一個^M字元.

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23937368/viewspace-1044947/,如需轉載,請註明出處,否則將追究法律責任。

相關文章