EditPlus 對於分行符號的處理

來源:互聯網
上載者:User

EditPlus 有個檔案格式,用於區分三種分行符號之一。

一、/r/n 與 /n 混合(即 PC 與 Unix 換行混合)
1,如果文本中 /r/n 的數量大於 /n 的數量,那麼就以 PC 的 /r/n 方式來顯示,這時 /n 並不能顯示成為一個新行,而是成為一個不可顯字元;
2,如果文本中 /r/n 的數量小於 /n 的數量,那麼就以 Unix 的 /n 方式來顯示,這時 /r/n 中的 /r 成為一個不可顯字元,而 /r 後面的 /n 進行換行;
3,如果文本中 /r/n 的數量與 /n 的數相相同,那麼就優先採用 /r/n 方式來顯示,這時單獨的 /n 成為一個不可顯字元。

二、/n 與 /r 混合(即 Unix 與 Mac 換行混合)
1,如果文本中 /n 的數量大於 /r 的數量,那麼就以 Unix 的 /n 方式進行換行,這時 /r 成為一個不可顯字元;
2,如果文本中 /n 的數量小於 /r 的數量,那麼就以 Mac 的 /r 方式進行換行,這時 /n 成為一個不可顯字元;
3,如果文本中 /n 與 /n 的數量一樣多,就優先以 Unix 的 /n 方式進行換,同時 /r 成為一個不可顯字元。

三、/r/n 與 /r 混合(即 PC 與 Mac 換行混合)
1,如果文本中 /r/n 的數量大於 /r 的數量,那麼就以 PC 的 /r/n 方式進行換行,這時 /r 成為一個不可顯字元;
2,如果文本中 /r/n 的數量小於 /r 的數量,那麼就以 Mac 的 /r 方式進行換行,/r/n 其中的 /r 成為分行符號,後面的 /n 成為一個不可顯字元;
3,如果文本中 /r/n 與 /r 的數量一樣多,就優先以 PC 的 /r/n 方式進行換,單獨的 /r 成為一個不可顯字元。

四、/r/n、/n 與 /r 混合(即 PC、Unix、Mac 換行混合)
1,這三種換行哪種換行多就採用哪種方式;
2,如果三種換行數量或兩種換行數量相同時,以 /r/n、/n、/r 的優先順序確定換行模行。

實驗工具
文本顯示:EditPlus 3.00(254)beta
二進位修改:PSPad 4.5.3(2298)

 

http://topic.csdn.net/u/20090608/22/B4CBF61A-3B75-4350-BE68-A65DB006F361.html

17樓

 

0樓

上一次的“麻雀雖小、五髒俱全”挺受歡迎,今天再寫一個,不過這次講的是一個小問題的調試過程。

今天一個同事向我反映,說她的一段JAVA代碼,如果輸出的檔案尾碼是.idx,
則寫入的分行符號會丟掉,從Editplus中看到所有內容都出現在一行。

我感到很奇怪,檔案名稱和尾碼會影響流的內容?這明顯不可能,難道真的碰到靈異事件?
於是按照如下過程調試並解決問題:

1、寫獨立測試代碼
首先要驗證這個問題不是JAVA自身的問題,當即寫了測試代碼:

Java code
import java.io.BufferedWriter;import java.io.File;import java.io.FileWriter; public class TestIdx {    public static void main(String[] args) throws Exception{       File f=new File("d://test.idx");       BufferedWriter w=new BufferedWriter(new FileWriter(f));       w.write("abc");       w.write("/n");       w.write("123");       w.flush();       w.close();    }}

運行後,用UltraEdit開啟結果檔案,沒問題。
同事說,她直接用的FileWriter,於是稍作修改,再測,沒問題。
同事又說,她的檔案用追加模式開啟,再改,再測,還是沒有問題。

2、重現問題
感到有些不可思議,於是到同事機器上查看。
發現確實有此現象。

3、代碼走讀
查看代碼,沒發現特別之處。

4、做本機覆寫,嘗試定位問題
通過修改輸出檔案名、檔案尾碼,通過多次嘗試,發現問題不是出在.idx尾碼上,
因為任意新建立的檔案均無此問題,但如果繼續向她機器上已經存在的log.idx上追加就不行。

5、清理環境後嘗試重現問題
既然問題與特定檔案相關,則刪除該奇怪檔案(刪前先做備份,待問題解決後追究根源),
重新運行程式產生新的同名檔案,問題沒有再重現。
那麼,問題的根本原因肯定在此檔案內。

6、追根溯源
我要求同事將log.idx檔案發給我,我用UltraEdit開啟,發現換行正確,
而同事機器上用Editplus開啟同一個檔案則換行不正確。
於是又找到一個用Editplus的同事,開啟該檔案,換行也不正確。
因此,可以說明,檔案本身沒有大問題,問題在於文字編輯器對文本中的換行的處理方式不一致。

進一步用Ultraedit的二進位模式研究該文字檔,
發現該文字檔存在兩種換行格式:某些行之間是windows的“/r/n”,而某些行之間是unix的“/n”。
初步斷定這是造成差異的原因,Editplus對存在兩種斷行符號制式的檔案,可能只識別一種。

7、驗證猜測
在Ultraedit中建立空白文字檔,輸入:
123
456
789

在UE中切換到二進位模式,顯示為:
00000000h: 31 32 33 0D 0A 34 35 36 0D 0A 37 38 39          ; 123..456..789
用Editplus開啟,正常顯示為三行

在UE二進位模式下,刪除第二個0D,變成:
00000000h: 31 32 33 0D 0A 34 35 36 0A 37 38 39          ; 123..456.789
用Editplus開啟,後面的斷行符號不識別,顯示為兩行:
123
456789

再刪除第一個0D,變成:
00000000h: 31 32 33 0A 34 35 36 0A 37 38 39          ; 123.456.789
用Editplus開啟,正常顯示為三行
123
456
789

再恢複第二個0D,變成:
00000000h: 31 32 33 0A 34 35 36 0D 0A 37 38 39          ; 123.456..789
用Editplus開啟,前面的斷行符號不識別,顯示為兩行:
123456
789

8、結論
Editplus在判斷文字檔換行方面,
當文字檔中僅存在一種換行格式的時候(無論/r/n還是/n),Editplus都能正確識別
當文字檔中存在兩種換行格式的時候,以/r/n優先,單純的/n被忽略。

9、造成此現象的過程
該同事第一版代碼向檔案中追加的分行符號為“/r/n“,後來改成”/n“,但沒有刪除原來的檔案,
而檔案寫入方式為追加,導致檔案中出現兩種換行格式。

可能有些人在第六步完成後就停住,而我喜歡的是後面三步。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.