\n
(줄 바꿈)과 \r
(캐리지 리턴) 의 차이점은 무엇입니까 ?
특히 와 사이에 실질적인 차이가 있습니까? 다른 하나 대신 사용해야하는 곳이 있습니까?\n
\r
\n
(줄 바꿈)과 \r
(캐리지 리턴) 의 차이점은 무엇입니까 ?
특히 와 사이에 실질적인 차이가 있습니까? 다른 하나 대신 사용해야하는 곳이 있습니까?\n
\r
답변:
ASCII 코드의 관점에서 보면 각각 10과 13이므로 3입니다 .-).
그러나 진지하게 많은 것이 있습니다.
\n
줄 끝의 코드이며 \r
특별한 의미는 없습니다.\n
에서 줄 끝의 표준 이스케이프 시퀀스입니다 (필요에 따라 OS 특정 시퀀스로 /에서 변환 됨)\r
줄 끝 코드\r\n
순서대로)입니다.\r\n
인터넷의 텍스트 형식에 대한 표준 줄 종결\r
경우 캐리지가 가장 왼쪽에 닿을 때까지 왼쪽으로 되돌아 가도록 명령하고 (느린 작동) \n
롤러가 한 줄을 롤업하도록 명령합니다 (훨씬 더 빠른 작동). \r
전에 \n
, 캐리지가 여전히 왼쪽으로가는 동안 롤러 이동할 수 있음 -!) 위키 백과는이 자세한 설명을 .\r
와 \n
유사하게 작동합니다 ( 캐리지 또는 롤러 가 없으므로 커서 측면에서 둘 다 제외).실제로 텍스트 파일에 쓰는 현대적인 상황에서는 항상 사용해야합니다 \n
(기본 런타임은 Windows와 같은 이상한 OS 인 경우이를 번역합니다). 사용하는 유일한 이유 \r
는 문자 터미널 (또는이를 모방 한 "콘솔 창")에 쓰고 있고 마지막으로 쓴 마지막 줄을 덮어 쓰기 위해 다음 줄을 쓰고 싶을 때입니다 (때로는 구피에 사용되는 "아스키 애니메이션" "진행률 표시 줄의 효과)-GUI의 세계에서는 꽤 쓸모 없어지고 있습니다 ;-).
\0
)을 이후에 추가 된 \n
추가 할 수 있도록 시각. 이것은 OS에 의해 투명하게 처리되었으므로 레거시 코드에서 흔적을 찾을 수 없습니다.
\r
(리눅스를 사용 하고 있음)을 잊어 버렸기 때문에 꽤 불쾌한 경험을했습니다 . 유효한 파일로 보이는 것을 파싱하기 시작하면 파싱하는 파일이 Windows에서 만들어져 파서가 실패했습니다. : D도 있다는 것입니다 모두 큰 문제 \n
또는 \r
의미에서 볼 수 있습니다 그 예를 들어 a
, .
, (
등의 문자가 있습니다.
역사적으로 a \n
는 캐리지를 아래 \r
로 이동하는 데 사용 되었지만 a 는 캐리지를 페이지의 왼쪽으로 다시 이동하는 데 사용되었습니다.
printf("abcdefghijlm\rNOP\n");
OpenSuSe에서 gcc-8로 컴파일 된 이 C 코드를 고려 하고 터미널에서 실행하면이 결과가 출력 NOPdefghijlm
됩니다. 문자열의 \ r (캐리지 리턴)은 커서가 행의 시작 (캐리지)으로 이동하고 \ r (예 : "NOP") 뒤의 문자가 이전에 있던 것을 덮어 씁니다 (예 : "abc")! 같이 당신은 백 스페이스 (\ b)는 유사한 "캐리지 운동"을 달성 할 수있는 printf("abcdefghijlm\b\bNOP\n");
생산하는abcdefghijNOP
두 개의 다른 캐릭터.
\n
유닉스 텍스트 파일에서 줄 끝 종결 자로 사용됩니다.
\r
Mac 텍스트 파일에서 줄 끝 종결 자로 사용됩니다.
\r\n
(즉 둘 다) Windows 및 DOS 텍스트 파일에서 행을 종료하는 데 사용됩니다.
\r
오랫동안 Mac에서 줄을 끝내지 않았습니다. 2001 년 Mac OS X (Unix 기반)가 출시되면서 \n
이제 사용됩니다.
\r
MS Office 2011 Excel : CSV 저장 (모든 기본 설정 포함)을 사용하는 일부 응용 프로그램 은 ISO-8859-1로 인코딩 된 파일을 줄 \r
끝으로 저장합니다 .
아무도 그것을 구체적으로 언급하지 않았기 때문에 (알거나 기억하기에는 너무 어리십니까?)-나는 \r\n
타자기 및 유사한 장치에 대한 출처 의 사용을 의심합니다 .
여러 줄을 지원하는 타자기를 사용하면서 줄 바꿈을 원할 경우 수행해야 할 두 가지 물리적 작업이있었습니다. 캐리지를 페이지의 시작 부분 (미국의 경우 왼쪽)으로 다시 밀고 용지를 한 단계 위로 급지하십시오. .
예를 들어, 라인 프린터 시절에 굵은 텍스트를 수행하는 유일한 방법은 줄 바꿈없이 캐리지 리턴을 수행하고 이전 문자에 동일한 문자를 인쇄하여 더 많은 잉크를 추가하여 더 어둡게 (굵게 표시)하는 것입니다. . 타자기에서 기계적인 "개행"기능이 실패했을 때, 이는 성가신 결과였습니다.주의를 기울이지 않으면 이전 텍스트 줄 위에 입력 할 수 있습니다.
운영 체제마다 다른 두 가지 문자 또한 이것은 전송 TCP/IP
해야하는 데이터에서 중요한 역할 을합니다\r\n
.
\n
유닉스
\r
맥
\r\n
Windows와 DOS.
Windows에서 \ n은 다음 줄의 시작 부분으로 이동합니다. \ r은 다음 줄로 이동하지 않고 현재 줄의 시작으로 이동합니다. 내 콘솔 응용 프로그램에서 \ r을 사용하여 일부 코드를 테스트하고 있으며 텍스트가 화면 위로 스크롤되는 것을보고 싶지 않으므로 프레임 속도 (예 : 프레임 속도 ( FPS), 나는 printf ( "%-10d \ r", fps); 그러면 다음 줄로 이동하지 않고 커서를 줄의 시작 부분으로 되돌리고 프레임 속도가 동일한 줄에서 지속적으로 업데이트되는 동안 화면에서 스크롤되지 않는 다른 정보를 얻을 수 있습니다 (% -10은 특정 출력은 10 자 이상이며, 왼쪽으로 정렬되어 공백으로 채워져 해당 줄의 이전 값을 덮어 씁니다. 이런 것들에 매우 편리합니다.
작은 역사
/ r은 "return"또는 "carriage return"을 의미하며 타자기에 대한 기록이 있습니다. 캐리지 리턴은 줄의 시작 부분에 입력 할 수 있도록 캐리지를 오른쪽으로 끝까지 이동 시켰습니다.
/ n은 타자기 일부터 새 줄로 이동 한 날부터 "새 줄"을 나타냅니다. 비록 시작에 필연적이지 않기 때문에 일부 OS는 타자기가 수행 한 순서와 같이 / r 리턴과 / n 줄 바꿈이 모두 필요하다는 이유를 채택했습니다. 또한 사용 된 오래된 8 비트 컴퓨터에 대해서도 설명합니다. "캐리지 리턴"에서 "Enter"가 아닌 "Return"을 가져야합니다.
혼란을 더하기 위해 브라우저의 HTML 페이지에서 TextArea 요소를 사용하여 간단한 텍스트 편집기를 작업했습니다. CR / LF와 관련한 호환성 문제를 예상하면서 플랫폼을 확인하고 플랫폼에 적용 할 수있는 줄 바꿈 규칙을 사용하는 코드를 작성했습니다.
그러나 실제를 확인할 때 흥미로운 것을 발견했습니다. TextArea에 포함 된 문자를 문자에 해당하는 16 진수 데이터를 생성하는 작은 JavaScript 함수를 통해 .
테스트를 위해 다음 텍스트를 입력했습니다.
안녕하세요, 세계 [입력]
안녕, 잔인한 세상 [enter]
텍스트 데이터를 조사했을 때 얻은 바이트 시퀀스는 다음과 같습니다.
48 65 6c 6c 6f 2c 20 57 6f 72 6c 64 0a 47 6f 6f 64 62 79 65 2c 20 43 72 75 65 6c 20 57 6f 72 6c 64 0a
이제 대부분의 사람들은 이것을보고 0a 바이트는 보이지 않지만이 출력은 Unix / Linux 플랫폼에서 얻은 것으로 생각합니다. 그러나 여기에 문지름이 있습니다.이 시퀀스는 Windows 7 64 비트의 Chrome에서 얻었습니다.
따라서 TextArea 요소를 사용하고 텍스트를 검사하는 경우 TextArea에서 실제 문자 바이트가 반환되는 것을 확인하기 위해 위에서 한 것처럼 출력을 확인하십시오. 다른 플랫폼이나 다른 브라우저에서 이것이 다른지 아직 알지 못했지만 JavaScript를 통해 텍스트 처리를 수행하고 있다면 해당 텍스트 처리 플랫폼을 독립적으로 만들어야합니다.
위 게시물에서 다룬 규칙은 콘솔 출력에 적용 되지만 HTML 요소는 UNIX / Linux 규칙을 따릅니다. 다른 플랫폼 / 브라우저에서 달리 발견하지 않는 한
#include <stdio.h>
void main()
{
int countch=0;
int countwd=1;
printf("Enter your sentence in lowercase: ");
char ch='a';
while(ch!='\r')
{
ch=getche();
if(ch==' ')
countwd++;
else
countch++;
}
printf("\n Words = ",countwd);
printf("Characters = ",countch-1);
getch();
}
이 예제를 사용하여 \ n 대신 \ n을 넣어보십시오. 작동하지 않으며 이유를 추측하려고합니까?
Return
과 Enter
. 심지어 내 현대 무선 키보드는 여전히 아래 앤 예전에 화살표 표시 Return
(지금 "입력"숫자 키패드의와 일치하는 제목되는 키 Enter
에있는 화살표를 표시하지 않습니다 키)
\ n (줄 바꿈)과 \ r (캐리지 리턴)의 차이점은 무엇입니까?
특히
\n
와 사이에 실질적인 차이가\r
있습니까? 다른 하나 대신 사용해야하는 곳이 있습니까?
\n
개행 에 대한 각각의 이스케이프 시퀀스로 짧은 실험을하고 싶습니다.\r
캐리지 리턴 .
이 질문은 언어 독립적이라는 질문을 받았습니다. 그럼에도 불구하고, 우리는 적어도 실험을 수행하기 위해 언어가 필요합니다. 필자의 경우 C ++을 선택했지만 실험은 일반적으로 모든 프로그래밍 언어에 적용 할 수 있습니다.
프로그램은 단순히 for-loop 반복으로 문장을 콘솔에 인쇄하기 위해 반복됩니다.
개행 프로그램 :
#include <iostream>
int main(void)
{
for(int i = 0; i < 7; i++)
{
std::cout << i + 1 <<".Walkthrough of the for-loop \n"; // Notice `\n` at the end.
}
return 0;
}
산출:
1.Walkthrough of the for-loop
2.Walkthrough of the for-loop
3.Walkthrough of the for-loop
4.Walkthrough of the for-loop
5.Walkthrough of the for-loop
6.Walkthrough of the for-loop
7.Walkthrough of the for-loop
이 결과는 어떤 시스템 에서도 제공되지 않으며이 C ++ 코드를 실행하고 있습니다. 그러나 가장 현대적인 시스템에서는 작동합니다. 자세한 내용은 아래를 참조하십시오.
이제 동일한 프로그램이지만 차이점이 있지만 인쇄 순서가 끝나면 \n
대체됩니다 \r
.
캐리지 리턴 프로그램 :
#include <iostream>
int main(void)
{
for(int i = 0; i < 7; i++)
{
std::cout << i + 1 <<".Walkthrough of the for-loop \r"; // Notice `\r` at the end.
}
return 0;
}
산출:
7.Walkthrough of the for-loop
차이점은 어디에 있습니까? 캐리지 리턴 이스케이프 시퀀스를 사용할 때의 차이점은 간단합니다.\r
각 인쇄 시퀀스의 끝에서 를 사용할 때이 시퀀스의 다음 반복이 다음 텍스트 줄에 들어 가지 않는다는 것입니다. 각 인쇄 시퀀스의 끝에서 커서가 다음 줄의 시작으로 뛰어 들었다.
대신 커서를 사용하기 전에 커서가 줄의 시작 부분으로 되돌아갔습니다. \r
캐릭터 . -결과는 인쇄 순서의 각 반복이 이전의 인쇄 순서를 대체하게됩니다.
* 참고 : A \n
가 반드시 다음 텍스트 행의 시작으로 이동하지 않아도됩니다. 일부는 일반적으로 더 오래된 운영 체제에서 \n
개행 문자 의 결과로 시작뿐만 아니라 다음 줄의 아무 곳으로나 이동할 수 있습니다. 그렇기 때문에 \r \n
다음 텍스트 줄을 시작할 때 사용해야 합니다.
이 실험은 인쇄 순서의 반복 결과 와 관련하여 줄 바꿈과 캐리지 리턴의 차이를 보여주었습니다 .
입력 에 대해 논의 할 때프로그램 에 일부 터미널 / 콘솔은 더 나은 이식성, 호환성 및 무결성을 위해 캐리지 리턴을 암시 적으로 개행으로 변환 할 수 있습니다.
그러나 다른 것을 선택하거나 명시 적으로 만 사용해야하는 경우 항상 목적에 맞게 작동하고 엄격하게 구별해야합니다.