close

摘自http://catchtest.pixnet.net/blog/post/21981758網站:

換行符號有兩種,一個叫Cr(carriage return),一個是Lf(line feed)
Ascii code分別是13(0d)跟10(0a)
Cr是將指標移到最前頭(回車)
Lf是跳到下一行的位置,但沒有跳到開頭的效果
合在一起就是把指標移到下一行的最前面
類似我們按Enter的效果

不巧的是,三大作業系統的換行符號定義都不一樣
Mac只有Cr
Linux/Unix只有Lf
Windows則是CrLf,兩者皆有
意思是Linux只需要Lf一個字元就可以有換行加移到前面的效果
但是Windows就需要兩個

   而我用Java的String的split("\n")去做分割字串,也真的只對Lf(0x0a)有效。因為同時因應\n、\r、\r\n以及不正常的\n\r,其Regex應是\n\r?|\r\n?

  在用Java IO套件的BufferedReader去readLine,發現它讀到\r或\n都會截止,萬一\r或\n也是資料的一部份就會有問題。最後寫法變成使用FileInputStream將檔案讀進byte array,遇到\r換成\\r,遇到\n換成\\n,等處理完之後再置換回來。此外,Java String使用Unicode表示法如:\u0041、\uA440。可以使用\u0001..\u0009、\u000B、\u000F等。可是偏不能使用這對換字完,也就是使用\u000A和\u000D會無法通過編譯。

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Jemmy 的頭像
    Jemmy

    Jemmy Walker

    Jemmy 發表在 痞客邦 留言(0) 人氣()