2011-08-09 295 views
23

一位客戶向我發送.csv文件,其中換行符由0xD 0xD 0xA組成。據我所知換行符來自Mac或Unix的0xA或來自Windows的0xD 0xA帶有0D 0D 0A換行符的文本文件

0xD 0xD 0xA任何已知的編碼?是否有任何已知的節省序列會破壞文件的行結尾(導致此行爲)(我認爲客戶使用Mac)?

該文件不是以任何編碼標記開始,它直接從文本內容開始。如果用代碼頁1252打開,則文本顯示正確。

回答

24

CRCRLF被稱爲Windows XP notepad word wrap bug的結果。

以供將來參考,這裏是從鏈接的博客相關的摘錄:

當你按在Windows計算機上的回車鍵,兩個字符實際存儲:回車(CR)和換行符(如果)。操作系統總是按照Enter鍵的方式解釋字符序列CR LF:它將移動到下一行。但是,當單獨有額外的CR或LF字符時,這有時會導致問題。

在Windows XP版本的記事本中存在一個缺陷,可能會導致額外的CR字符存儲在顯示窗口中。該錯誤發生在以下情況下:

如果打開了單詞換行選項,並且顯示窗口包含換行的長行,則保存該文件將導致記事本在每個換行點處插入字符CR CR LF顯示窗口,但不在保存的文件中。

如果將CR CR LF字符複製並粘貼到其他程序中,CR CR LF字符可能會造成不必要的麻煩。如果您調整記事本窗口的大小,它們還會阻止記事本正確地重新包裝線條。

您可以通過關閉文字換行功能來​​刪除CR CR LF字符,然後根據需要將其重新打開。但是,當您這樣做時,光標將重新定位在顯示窗口的開頭。

1

這通常從在修訂控制系統,或類似的錯誤造成的。這是從CVS一個產品,如果一個文件從Windows簽入到Unix服務器,然後再次被檢出......

換句話說,它只是破...

+0

我發現,當我在Windows系統上的TortoiseCVS退房,默認是使用Windows行結尾。這導致'0D 0A'轉換爲'0D 0D 0A'(爲什麼TCVS在將'0A'擴展爲'0D 0A'?!時不尊重現有的'0D 0A'),並且我在Eclipse中以雙線間距結束我厭倦了清理。通過在退房時選擇「使用UNIX行尾」選項來解決該問題。 – ADTC

3

網景ANSI編碼的文件使用0D 0D 0A作爲換行符。

0

Apple郵件也被稱爲在文本和csv附件出站時發生編碼錯誤。實質上,它用行中的軟換行替換行終止符,在編碼中看起來像= 0D。如果附件通過電子郵件發送到Outlook,Outlook會看到軟線斷開,刪除=然後附加真正的換行符,即0D0A,因此您在每行末尾得到0D0D0A(cr cr lf)。編碼應該= 0D =如果它是一個mac格式文件(或任何其他unix的味道)或= 0D0A =如果它是一個Windows格式文件。

如果您通過蘋果郵件(至少在特拉華州或優勝美地)發送電子郵件,使附件不是文本或csv文件是可接受的解決方法,例如,壓縮它。

如果您在parallels下運行windows虛擬機,並使用蘋果郵件通過電子郵件發送txt文件,該bug也存在。這是電子郵件編碼。在這裏形成以前的評論,它看起來像netscape有同樣的問題。

0

只是說,這也是價值(那種...)是從PHP返回時:

<?php var_dump(urlencode(PHP_EOL)); ?> 
    // Prints: string '%0D%0A' (length=6)-- used in 5.4.24 at least 
相關問題