알림-\ r \ n 또는 \ n \ r?


390

나는 단지 그것들을 기억할 수 없다. 그렇다면 구식 ASCII 라인을 올바르게 종료하는 올바른 방법은 무엇입니까?


11
이렇게하면 파일을 이진 모드로 열어야합니다 . 그렇지 않으면 표준 C / C ++ 파일 스트림은 "\ n"(텍스트 파일의 경우 (기본값))을 플랫폼 별 ELS (end of line sequence)로 변환합니다. 따라서 Windows의 "\ r \ n"은 실제 디스크의 "\ r \ r \ n"으로 변환됩니다. 참고 : C / C ++를 사용하여 파일을 다시 읽는 경우 파일에서 읽을 때 ELS가 "\ n"으로 다시 변환되는 것을 알 수 없습니다.
Martin York

@Martin-.net에 있으며 "\ r \ n"과 함께 File.AppendAllText (이 예제에서는)를 사용하고 있으며 파일을 살펴 보았으며 마지막에는 \ r 중복이 없습니다. 라인. 마법?
Daniel Mošmondor 2016 년

@Daniel : 좀 더 구체적이어야 했어요. C / C ++ 스트림. 때 파일과 관련된 에서 열 텍스트 모드 . 또한 파일을 보는 방법에 따라 다릅니다 (16 진 편집기 사용).
Martin York

@Martin - 16 진수 모드에서 사용 PSPad ...
다니엘 Mošmondor

1
고대 키보드에서는 Enter 키를 Return 키라고했습니다. 그래서 Return이 먼저 왔고 그에 따라 Linefeed가 생성되었습니다. 당신이 너무 많은 역사를 가지고있을 때 그것은 매우 명백합니다.
Mark Ransom

답변:


1084

기억하기 위해 ' r etur n ' 이라는 단어를 사용하고 r은 n 앞에옵니다.


116
사용할 단어가 return 이라는 것을 기억하려면 \ r이 캐리지 리턴 이라는 것을 기억하십시오 . "Return"은 Mac 키보드의 키 이름이거나 나중에 PC 키보드를보고 "Enter"키를보고 문자 순서가 잘못되었다는 것을 기억하십시오.
Rob Kennedy

3
@ 데이비드하지만 그 효과가 궁금 해서요 \n\r그리고 \r\n그들은 같은 효과를 않습니다되지 동일? 차이점을 알 수 있습니까?
Mr.Anubis

7
@ Mr.Anubis 특정 도트 매트릭스 프린터를 사용하는 경우 명령 순서가 중요하지 않으므로 차이가 없어야합니다. 그러나 일부 프린터에서는 빈 줄이 더 있거나 줄이 전혀 표시되지 않습니다. 그리고 위에서 말한 모든 것은 텍스트 편집기에 적용됩니다-혼란스러워지고 TextStream 클래스가 아프게됩니다. 주문 IS 중요합니다. :)
Daniel Mošmondor 2016 년

12
@ DanielMošmondor 또는 순서가 중요하다는 것을 기억할 수 있습니다. 또는 당신이 SO에게 물었을 때 누군가가 당신에게 RemiNder를 주었을 때 나중에 잊어 버렸습니다. 또는 r과 n의 순서가 뒤
바뀌기

5
@RobKennedy haha ​​당신은 내가 여기 와서 돌아 오는 것에 대해 읽고, "위대한!" 그런 다음 귀하의 의견을 읽었습니다. 이제는 어떤 키를 보지 말아야하는지 기억할 수 없을 때마다- "Enter"키를보고 "여기에 뭔가 잘못된 것"이라고 생각합니다.
웨인 우로 다

53

C #을 사용 Environment.NewLine하는 경우 MSDN 을 사용해야합니다 .

비 Unix 플랫폼의 경우 "\ r \ n"을 포함하는 문자열 또는 Unix 플랫폼의 경우 "\ n"을 포함하는 문자열


46
실제로 이런 종류의 일은 당신이하는 일에 달려 있습니다. 평범한 텍스트를 콘솔이나 로컬 사용을 위해 파일로 출력하는 Environment.NewLine것이 좋습니다. 그러나 잘 정의 된 형식으로 내용을 작성하는 경우 형식이 개행을 정의 할 수도 있습니다. 예를 들어, HTTP 프로토콜은 상태 있어야 사용하는 \r\n플랫폼에 관계없이, 등 헤더의 줄 끝으로.
Matti Virkkunen 2016 년

3
예, 이것은 정말 나쁜 조언입니다.
IvanP

그렇기 때문에 웹 메시지를 피하고 \ r \ n (windows), \ r (mac), \ n (linux)가 웹 서버에 \ r \ n으로 제대로 전송되는지 확인하기 위해 유닛 테스트를 빌드해야합니다.
TamusJRoyce

37

새 줄은 운영 체제에 따라 다릅니다.

DOS & Windows: \r\n 0D0A (hex), 13,10 (decimal)
Unix & Mac OS X: \n, 0A, 10
Macintosh (OS 9): \r, 0D, 13

자세한 내용은 여기 : https://ccrma.stanford.edu/~craig/utility/flip/

의심스러운 경우 프리웨어 16 진 뷰어 / 편집기를 사용하여 파일이 새 줄을 어떻게 인코딩하는지 확인하십시오.

나를 위해, 내가 도움에 가이드를 다음을 사용 나를 기억 : 0D0A = \ 연구 \ n은 CR, LF = ca를 RR iage는 r에 eturn, 리 N 전자 공급


7
이상하게도, 나는 0D0A마음으로 알고 있지만 여전히 \r와를 혼동하는 사람들 중 하나입니다 \n.
Nyerguds

1
또는 \ r이 캐리지 리턴이고 \ n이 줄 바꿈임을 기억합니다. 단지 순서를 기억하지 못하기 때문에 어느 것이 0D이고 어느 것이 0A인지 기억하는 데 도움이되지 않습니다.
Nyerguds

20

시퀀스는 CR (캐리지 리턴)-LF (라인 피드)입니다. 도트 매트릭스 프린터를 기억하십니까? 바로 그거죠. 따라서 올바른 순서는 \ r \ n입니다.


이것이 가장 논리적 인 답변이라고 생각합니다
David Snabel-Caunt

12
LF + CR은 프린터에서 동일한 CR + LF를 수행합니다.
ikegami 2016 년

10
동의하지 않습니다. @David. (이후, 그 문제에 대한, 또는 타자기 단순히 도트 매트릭스 프린터의 생각 들이있어 반환 캐리지를 가지고있는 사람을) 충분하지 않습니다. 작동 방식에 대한 기본 정보만으로도 줄의 시작 부분으로 돌아 오기 전후에 용지를 진전 시킬지 여부를 중요하게 생각할 이유가 없습니다. \ r \ n과 \ n \ r은 모두 같은 위치에 용지를 넣습니다.
Rob Kennedy

모든 프린터가 아니라 대부분의 프린터에서 @ikegami . 또한 해당 동작을 구성하기위한 DIP 스위치가있었습니다. :)
Daniel Mošmondor 2016 년

5
캐리지 리턴 후 라인 피드를 넣는 이유 중 하나는 헤드가 용지의 왼쪽 가장자리로 돌아 오는 동안 플래 튼이 한 라인을 인덱싱 할 수 있기 때문에 필요한 총 시간이 줄어든 것입니다. 더 긴 작업이 먼저 시작되므로 더 긴 작업을 실행하는 데 전체 작업이 완료됩니다. 우리는 그때와 같은 이유로 많은 일을했습니다. ... (110) 보드에 백 개 라인의 몇을 기다리고 상상
제리 앤드류스에게

8

모든 .NET 언어에서 Environment.NewLine선호됩니다.


상수 문자열에는 작동하지 않습니다. 필요한 경우 상수를 사용하지 않고 정적 문자열을 대신 사용하는 것이 좋습니다.)
TamusJRoyce

5

이 작업을 수동으로 수행하는 데주의하십시오.
실제로 나는 이것을 하지 않는 것이 좋습니다.

실제로 우리는 플랫폼에 특정한 라인 종료 시퀀스 LTS에 대해 이야기하고 있습니다.

텍스트 모드에서 파일을 열면 (즉, 바이너리가 아닌) 스트림은 "\ n"을 플랫폼에 맞는 올바른 LTS로 변환합니다. 그런 다음 파일을 읽을 때 LTS를 "\ n"으로 다시 변환하십시오.

결과적으로 "\ r \ n"을 Windows 파일로 인쇄하면 실제 파일에 "\ r \ r \ n"시퀀스가 표시됩니다 (16 진 편집기로 확인).

물론 이것은 플랫폼간에 파일을 전송할 때 정말 고통입니다.

이제 네트워크 스트림에 쓰는 경우 수동으로 수행합니다 (대부분의 네트워크 프로토콜에서이를 구체적으로 부릅니다). 그러나 스트림이 해석을 수행하지 않도록해야합니다 (그래서 이진 모드가 적절했습니다).


4

\r\n Windows는 잘 작동합니다.


\n최신 버전의 메모장을 포함하여 Windows에서도 싱글 이 잘 작동합니다.
André Caron 2016 년

OS마다 다른 엔딩을 사용하므로 현대 편집자는 줄 엔딩을 감지 할 것이라고 생각합니다.
David Snabel-Caunt

1
실제로는 아닙니다 :이 파일을 Windows에서 파일 (텍스트 모드로 열린 std C / C ++ 파일)로 인쇄하면 실제 파일에 "\ r \ r \ n"이 포함됩니다 (16 진 편집기로 확인). 다시 읽으면 "\ r \ n"이 다시 단일 "\ n"으로 변환됩니다.
Martin York

2
실제로 @DavidCaunt는 \ n을 시도했지만 Win8의 메모장에서는 작동하지 않습니다.
philk

4

에서 위키 백과 (해당 기사에서 당신의 OS에 대한 올바른이다 읽을 수 있습니다) :

ASCII 또는 호환 문자 세트를 기반으로하는 시스템은 LF (줄 바꿈, '\ n', 0x0A, 10 진수 10) 또는 CR (캐리지 리턴, '\ r', 0x0D, 10 진수 13) 또는 개별적으로 CR을 사용합니다. LF (CR + LF, '\ r \ n', 0x0D0A).


3

\r\n

내가 사용한 타자기와 반대 이기 때문에 기억이 나지 않습니다 .
음, 그것이 정상이라면 기억할 필요가 없었습니다 ...:-)

Wikipedia의 타자기 * 위키 백과의 이미지

타자기에서 캐리지 리턴 레버 를 사용하여 줄을 완성 하면 드럼과 줄 바꿈 을 만들기 전에 캐리지 리턴 을 수동으로 조작 할 수 있습니다. .

freesound.org에서이 레코드를 통해 처음부터 용지 급지 소리를 들을 수 있으며 , 끝에서 약 -1 : 03 초 후에 울리는 드럼의 라인 사운드 종료 경고음이 울린 후 캐리지 리턴 중 하나.


2

C #을 사용하는 경우 왜 사용하지 Environment.NewLine않습니까? (필자는 일부 파일 작성기 객체를 사용한다고 가정합니다. 그냥 전달 Environment.NewLine하면 올바른 종결자가 처리됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.