java处理linux中的 m_Linux下处理BOM头和^M的简单方法
Linux在網絡服務器、嵌入式設備的市場上占有較大份額,Microsoft Windows在桌面操作系統上占有較大的份額,因此有很多的人喜歡用Windows去控制操作Linux。
既然用Windows去控制Linux,難免導致Windows系統上的產生的文件以某種途徑傳到了Linux系統中,因而導致顯示問題或者出現亂碼的情況。
例如用Windows自帶的“記事本”(notepad)程序默認保存的文件會在每一行的結尾處帶有^M標記。
PS: 一些常見的錯誤例子:有的人可能有疑問,為什么我用記事本把文件保存成UTF-8也不好用。還有的人在執行“sed -i '/^$/d' filename”時發現明明有空格卻沒有刪除。
因此在日常使用過程中,無論是用什么工具編輯文件上傳到Linux服務器,都需要注意換行符問題。
現象:
1.cat程序顯示有問題
如文件的開頭顯示“?t”
2.bash、python等文件執行時報錯
如-bash: ./someshname.sh: /bin/bash^M: bad interpreter: No such file or directory
但是這種情況如果不想轉換換行符,可以直接用相應的解釋器去執行這個文件,如/bin/bash?./someshname.sh
3.其他應用程序如php、java等運行時報錯
解釋:
換行符(newline、line ending、end of line(eol)或line break),是一種控制字符,用于區分表示每一行的結束。換行符通常由line feed (LF)和carriage return (CR)兩者中的一種或者它們的組合出現在計算機系統中,常見的換行符有三種:LF (UNIX and OS X \n)
CR (Classic Mac \r)
CRLF(Windows \r\n)
LF是Line Feed的縮寫,CR是Carriage Return的縮寫,他們的控制字符(\r,\n還是\r\n)由對應的ANSCII表示。
之所以出現“^M ”是因為^M在ANSCII中就表示Carriage Return即\r所以如果在Linux的某個打印輸出中出現了^M,表示換行符是Windows格式的。
BOM是Byte order mark的縮寫,釋義為“字節順序標記”,用于明確表明此文件屬于Unicode編碼,其他的一些作用可以參考維基百科的英文頁面(顯然中文頁面解釋的不全面)。
解決辦法:
這個問題其實簡單到沒有必要用一篇文章的篇幅來表述,簡答說就一句話:可以借助dos2unix 工具,將Windows格式的文本文件轉化成Linux下可用的格式。但為了方便那些需要詳細了解的人,特地多寫幾句如下。
# Remove BOM and ^M (BOM and ^M can come from Windows notepad program and save as 'ANSI' or 'UTF-8')
# such as "example^M$", ANSI, ASCII text, with CRLF line terminators
# such as "M-oM-;M-?example^M$", UTF-8, UTF-8 Unicode (with BOM) text, with CRLF line terminators
# Linux right format is "example$", ASCII text
# other method is using vim [noeol][dos] :set ff=unix
# determine file typefile?testfilename
# display $ at end of each line, display TAB characters as ^I, use ^ and M- notation, except for LFD and TABocat?-A?testfilename
#Text file format converters. Convert text files with DOS or Mac line endings to Unix line endings and vice versa.
# Debian & Ubuntu: apt-get install dos2unix
# RHEL & CentOS: yum install dos2unix
# DOS/Mac to Unix and vice versa text file format converterdos2unix?testfilename
關于顯示亂碼問題
1.有可能跟終端(SSH連接工具)有關系,嘗試調整字符編碼為utf-8
2.有可能是系統原因,如缺少中文支持
一些可用的參考:
tag:bad interpreter,移除BOM,dos2unix命令,CRLF,Linux換行符
--end--
總結
以上是生活随笔為你收集整理的java处理linux中的 m_Linux下处理BOM头和^M的简单方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信用卡如何贷款 信用卡申请贷款如此简单
- 下一篇: python去除图像光照不均匀_低光照环