개행문자처리방식

FrontPage|FindPage|TitleIndex|RecentChanges| UserPreferences P RSS
Unix/Linux 와 Windows 의 개행문자처리방식이 달라서 CGI 프로그램을 설치할때 종종 귀찮은 문제가 발생하곤 합니다. 원인과 대책을 정리해보죠.

문제 원인

  • 아래의 도표에서처럼 OS에 따라서 개행문자처리방식이 다르다.

    OS 개행문자 특수문자표시
    Unix/Linux <NL> \n
    DOS/윈도우계열 <CR> <NL> \r\n
    Mac OS 계열 <CR> \r

    LF(line feed)보다 NL(new line)이라는 기호를 사용합니다.

해결책

FTP 사용시

  • FTP 프로그램으로 소스코드를 전송할때, Binary 모드로 하지 말고, Ascii 모드로 전송해야한다.
  • 윈도우에서 다음과 같은 프로그램을 이용하여 FTP 로 저장.(텔넷접속이 불가능할때도 유용.)

텔넷 접속시

  • 윈도우에서 zip 으로 압축해서 전송해서 그곳에서 압축을 푼다.(unzip)
  • col -b < old_filename > new_filename
  • vi 혹은 VimEditor 에서 : :%s/^M//g ^M 은 Ctrl-V + Ctrl-M or Ctrl+V + Enter 으로 입력해야 함. 직접 ^M 을 입력해서는 안됨.
  • VimEditor 에서 :set ff=unix


참고

  • Perl과 쉘을 이용한 변환 스크립트 (인터넷을 뒤져서 퍼왔구먼요^^)

    dos2unix : 변환식 = perl -pi -e 's/\r//' $*
     #!/bin/sh
     ##############################################################
     #
     #         * DOS to Unix *    File Converter
     #
     ##############################################################
     #  도스형 파일을 유닉스형으로 변환하는 도구
     ##############################################################
     #  1999. 9. 6.  by lawwal@way.co.kr
     ##############################################################
    
     EXEC_NAME=`echo $0 | awk -F/ '{print $NF;}'`
    
     ## 도움말
     if [ $# -lt 1 ]
       then
            echo "  USAGE: $EXEC_NAME File [ Files... ]"
            echo
            echo "     Example : $EXEC_NAME waycgi.html way-board.cgi"
            echo
            exit
     fi
    
     ## 실행
     perl -pi -e 's/\r//' $*
     
    unix2dos : 변환식 = perl -pi -e 's/\n/\r\n/' $*
     #!/bin/sh
     ##############################################################
     #
     #         * Unix to DOS *    File Converter
     #
     ##############################################################
     #  유닉스형 파일을 도스형으로 변환하는 도구
     ##############################################################
     #  1999. 9. 6.  by lawwal@way.co.kr
     ##############################################################
    
    
     EXEC_NAME=`echo $0 | awk -F/ '{print $NF;}'`
    
     ## 도움말
     if [ $# -lt 1 ]
       then
            echo "  USAGE: $EXEC_NAME File [ Files... ]"
            echo
            echo "     Example : $EXEC_NAME waycgi.html way-board.cgi"
            echo
            exit
     fi
    
     ## 실행
     perl -pi -e 's/\n/\r\n/' $*
     



Q: Win2000에서 텍스트파일을 만든다음..FTP 전송을 Ascii모드와 Binary모드 두가지로 해서 리눅스 머신에 전송한다음 Vi에디터로 읽었는데, Binary 모드 전송인 경우에두 이상한 문자(\r) 없이 잘 보이네요? 이상하다 내가 실험을 잘못했나?

A:리눅스에서 많이 사용하는 VimEditor 의 경우 DOS 포맷을 인식해서 캐리지리턴이 있어도 이상한 문자 없이 보여줍니다. 한 번 vi -b filename 해서 binary 모드로 열어보세요. 줄마다 캐리지리턴이 붙어있는 것을 보실 수 있을 겁니다. 그런데, 버전따라 설정따라 보이는게 다를때가 있는 것 같더군요. 알맹이는 똑같아도. 그리고, 파일 열어서 첫 화면 떴을 때 잘 보시면 아래쪽에 &dos format& 이라고 나와있습니다.

VimEditor를 이용해서 개행문자처리방식의 변환을 할 수 있습니다. 글을 읽은 후에 저장하기 전에 :set ff=dos:set ff=unix, :set ff=mac 명령을 내리면 해당 OS의 방식으로 저장할 수 있습니다. VimEditor는 Mac/Unix/Windows에서 모두 돌아갑니다.


Unix형식의 파일을 MS윈도의 NotePad 대신 WordPad로 읽어서 저장하면 도스 윈도계열의 파일형식으로 저장된다.


"; if (isset($options[timer])) print $menu.$banner."
".$options[timer]->Write()."
"; else print $menu.$banner."
".$timer; ?> # # ?>