구분 기호

Delimiter
CSV 형식 텍스트 파일의 조각에 대한 양식적 묘사.쉼표(빨간색으로 표시)는 필드 구분자로 사용된다.

구분 기호는 일반 텍스트, 수학 식 또는 기타 데이터 스트림에서 독립된 독립 영역 사이의 경계를 지정하기 위한 하나 이상의 문자 시퀀스입니다.[1][2]구분 기호의 예로는 쉼표로 구분된 값의 순서에서 필드 구분 기호의 역할을 하는 쉼표 문자가 있다.구분 기호의 또 다른 예는 모스 부호의 전송에서 문자와 단어를 구분하는데 사용되는 시간 간격이다.

수학에서 구분 기호는 종종 연산의 범위를 지정하는 데 사용되며, 분리된 기호(:"1 : 콜론)와 대립되는 모양 기호 쌍(예: ⟨,각진 괄호)으로 모두 발생할 수 있다.

구분 기호는 데이터 스트림에서 경계를 지정하는 다양한 수단 중 하나를 나타낸다.를 들어 선언적 표기법은 데이터 스트림 시작 시 길이 필드를 사용하여 데이터 스트림이 포함하는 문자 수를 지정하는 대체 방법이다.[3]

개요

구분 기호는 필드 및 레코드 구분 기호로, 또는 괄호 구분 기호로 구분할 수 있다.

필드 및 레코드 구분 기호

필드 구분 기호는 데이터 필드를 구분한다.구분 기호로 구분된 필드 그룹을 기록하십시오.[4]

예를 들어 CSV 파일 형식은 필드 사이의 구분 기호로 쉼표를 사용하고 레코드 의 구분 기호로 줄 끝 표시기를 사용한다.

fname,lname,age,light nancy,davolio,33,$30000 에린,보라코바,28,$25,$250 토니,raphael,35,$28700

CSV 파일 형식을 사용하여 단순 플랫 파일 데이터베이스 테이블을 지정하십시오.

괄호 구분 기호

블록 구분 기호, 영역 구분 기호 또는 균형 구분 기호라고도 하는 괄호 구분 기호는 텍스트 영역의 시작과 끝을 모두 표시한다.[5][6]

대괄호 구분 기호의 일반적인 예는 다음과 같다.[7]

구분 기호 설명
( ) 괄호.Lisp 프로그래밍 언어 구문은 주로 괄호 사용에 의해 인식될 수 있는 것으로 인용된다.[8]
{ } 교정기(곡선 괄호라고도 함)[9]
[ ] 대괄호(첨자를 나타내는 데 일반적으로 사용됨)
< > 대괄호.[10]
" " 문자열 리터럴을 나타내는 데 흔히 사용된다.[11]
' ' 문자 문맹을 나타내는 데 흔히 사용된다.[11]
<? ?> XML 처리 지시사항을 표시하는 데 사용된다.[12]
/* */ 일부 프로그래밍 언어에서 코멘트를 나타내기 위해 사용된다.[13]
<% %> 언어 경계를 지정하기 위해 일부템플릿에 사용됨.이를 템플릿 구분 기호라고도 한다.[14]

관습

역사적으로 컴퓨터 플랫폼은 관례에 따라 특정 구분자를 사용해 왔다.[15][16]다음 표에는 비교를 위한 몇 가지 예가 나와 있다.

프로그래밍 언어(프로그래밍 언어 비교(syntax) 참조).

문자열 리터럴 진술의 끝
파스칼 일문일답하다 세미콜론
파이톤 이중 인용, 단일 인용 끝(EOL)

필드레코드 구분 기호(참조, ASCII, 제어 문자)

필드 끝 기록의 끝 파일 끝
MacOS, Amiga를 포함한 Unix 유사 시스템OS LF 없는
Windows, MS-DOS, OS/2, CP/M CRLF 없음(CP/M 제외), Control-Z[17]
Classic Mac OS, Apple DOS, ProDOS, GS/OS CR 없는
ASCII/유니코드 단위 분리기
위치 31(U+001F)
기록 구분 기호
위치 30(U+001E)
파일 구분 기호
위치 28(U+001C)

구분 기호 충돌

구분문자 충돌은 작가나 프로그래머가 구분문자를 실제로 구분문자로 해석할 의도가 없이 텍스트에 도입할 때 발생하는 문제다.[4][18]예를 들어 XML의 경우 작성자가 각도 괄호 문자를 지정하려고 할 때마다 이러한 현상이 발생할 수 있다.

대부분의 파일 형식에는 필드 구분 기호와 레코드 구분 기호가 둘 다 있으며, 둘 다 충돌할 수 있다.예를 들어 쉼표로 구분된 값 파일의 경우, 필드 충돌은 작성자가 쉼표를 필드 값의 일부로 포함하려고 시도할 때마다 발생할 수 있으며(예: 급여 = "30,000달러"), 필드에는 여러 줄이 포함될 때마다 기록 구분자 충돌이 발생한다.레코드 및 필드 구분 기호 충돌은 모두 텍스트 파일에서 자주 발생한다.

어떤 맥락에서 악의적인 사용자나 공격자는 의도적으로 이 문제를 이용하려고 할 수 있다.따라서 구분자 충돌은 보안 취약성악용의 원인이 될 수 있다.악의적인 사용자는 SQL과 HTML과 같은 언어의 구분자 충돌을 이용하여 각각 SQL 주입과 사이트 간 스크립팅과 같은 잘 알려진 공격을 전개할 수 있다.

해결 방법

구분 기호 충돌은 매우 흔한 문제이기 때문에, 그것을 피하기 위한 다양한 방법들이 발명되었다.일부 저자는 데이터 스트림 자체에 나타날 가능성이 없는 구분 기호 문자(또는 문자 순서)를 선택하여 문제를 회피하려 할 수 있다.이러한 특별 접근법이 적합할 수 있지만, 데이터 스트림에 나타날 정확한 추측에 의존해야 하며, 악의적인 충돌에 대한 어떠한 보안도 제공하지 않는다.따라서 더 공식적인 규약이 적용된다.

ASCII로 구분된 텍스트

ASCII 문자 집합과 유니코드 문자 집합은 구분자로 사용할 수 있는 비인쇄 문자를 제공하여 이 문제를 해결하도록 설계되었다.이들은 ASCII 28에서 31까지의 범위다.

ASCII Dec 기호 유니코드 이름 공용 이름 사용법
28 정보 구분 기호 4 파일 구분자 파일 끝.아니면 다른 파일이 있을 수도 있는 연결 사이에.
29 정보 구분 기호 3 그룹 구분자 데이터의 섹션 사이에.단순한 데이터 파일에는 필요하지 않음.
30 정보 분리기 2 레코드 구분자 레코드 또는 행의 끝.
31 정보 구분 기호 1 단위 분리기 레코드의 필드 또는 행의 구성원 사이

ASCII 31 Unit 구분자를 필드 구분자로 사용하고 ASCII 30 레코드 구분자를 사용하면 텍스트 데이터 스트림에 나타나는 필드 구분자와 레코드 구분자 모두의 문제를 해결할 수 있다.[19]

이스케이프 캐릭터

구분 기호 충돌을 피하는 한 가지 방법은 이스케이프 문자를 사용하는 것이다.언어 설계의 관점에서, 이러한 것들은 적절하지만, 다음과 같은 단점이 있다.

  • 텍스트는 수많은 이스케이프 문자가 흩어져 있을 때 읽을 수 없게 렌더링될 수 있으며, 는 삐뚤삐뚤 이쑤시개 증후군(Perl 정규 표현에서 탈출하기 위해 \를 사용했기 때문에 "\/\/"와 같은 시퀀스로 이어진다.
  • 텍스트는 정규식을 통해 구문 분석하기 어려워진다.
  • 탈출 문자로 의도되지 않은 경우 "탈출" 메커니즘을 필요로 한다.
  • 타이핑은 쉽지만, 그들은 그 언어에 익숙하지 않은 누군가에게는 비밀스러울 수 있다.[20]
  • 그들은 주사 공격으로부터[citation needed] 보호하지 않는다.

탈출 순서

이스케이프 시퀀스는 이스케이프 문자와 유사하지만, 보통 하나의 문자 대신 어떤 종류의 니모닉으로 구성된다.한 가지 용도는 더블쿼트(") 문자를 포함하는 문자열 리터럴에서 사용된다.예를 들어 Perl에서 코드:

인쇄하다 "낸시는 x22원이라고 했다.헬로 월드!군중들에게 \x22.";  ### \x22 사용 

다음과 같은 출력을 생성한다.

인쇄하다 "낸시가 \"헬로 월드!군중에게 \".;      ### 이스케이프 차르 사용 

사람들이 사용할 때 이스케이프 시퀀스의 한 가지 단점은 개별 문자를 나타내는 코드를 외워야 한다는 것이다(참조: 문자 도면요소 참조, 숫자 문자 참조).

이중 인용 구분자

이스케이프 시퀀스 및 이스케이프 문자와는 대조적으로, 이중 구분 기호는 구분 기호 충돌을 피할 수 있는 또 다른 방법을 제공한다.예를 들어, 일부 언어에서는 문자열 리터럴을 지정하기 위해 단일 따옴표(') 또는 이중 따옴표(")를 사용할 수 있다.예를 들어 Perl에서:

인쇄하다 '낸시는 군중들에게 "헬로 월드!"라고 말했다.; 

탈출할 필요 없이 원하는 출력을 생성한다.그러나 이 접근법은 문자열에 두 가지 유형의 따옴표가 모두 포함되어 있지 않은 경우에만 작동한다.

패딩 인용 구분 기호

이스케이프 시퀀스 및 이스케이프 문자와 대조적으로 패딩 구분 기호는 구분 기호 충돌을 피하는 또 다른 방법을 제공한다.예를 들어 Visual Basic은 큰따옴표를 구분자로 사용한다.이것은 구분 기호를 탈출하는 것과 비슷하다.

인쇄하다 "낸시는 군중들에게 "안녕 월드!"라고 말했다." 

탈출할 필요 없이 원하는 출력을 생성한다.그러나 일반적인 탈출과 마찬가지로 인용문이 많이 사용될 때 혼란스러워질 수 있다.위의 소스 코드를 인쇄하는 코드는 더 혼란스러워 보일 것이다.

인쇄하다 "낸시는 군중들에게" "안녕하십니까!"라고 말했다.""" 

구성 가능한 대체 견적 구분자

이중 구분자와는 대조적으로, 여러 구분 기호는 구분 기호 충돌을 피하기 위해 훨씬 더 유연하다.[7]: 63

예를 들어 Perl에서:

인쇄하다 q^낸시는 더 이상 "헬로 월드!"라고 말하고 싶지 않다.^; 인쇄하다 Qq@Nancy는 더 이상 "Hello World!"라고 말하고 싶지 않다.@; 인쇄하다 qq(낸시는 더 이상 '헬로 월드!'라고 말하고 싶지 않다.); 

모두 편리한 문자가 구분 기호로 작용할 수 있도록 하는 견적 연산자를 사용하여 원하는 출력을 생성한다.이 방법이 더 유연하긴 하지만 이를 뒷받침하는 언어는 거의 없다.펄과 루비는 이다.[7]: 62 [21]

내용 경계

내용 경계는 구분 기호 충돌에 저항하도록 특별히 설계된 구분 기호의 특별한 유형이다.저자가 다른 해석 없이 항상 다중 부분 메시지에서 부품 사이의 경계를 표시하도록 보장되는 문자 순서를 지정할 수 있도록 하는 방식으로 작동한다.[22]

구분 기호는 통계적으로 내용에서 발생할 가능성이 없는 임의의 문자 시퀀스에서 자주 생성된다.UUID, 타임스탬프 또는 기타 구분 마크와 같은 식별 표시가 뒤따를 수 있다.또는 텍스트에 구분 기호가 나타나지 않도록 내용을 스캔할 수 있다.이렇게 하면 구분 기호가 더 짧거나 단순해질 수 있으며, 문서의 인간의 가독성을 높일 수 있다(예: MIME, Here documents 참조).

공백 또는 들여쓰기

일부 프로그래밍 및 컴퓨터 언어에서는 텍스트에서 독립 영역 사이의 경계를 지정하는 수단으로서 공백 구분 기호나 들여쓰기를 허용한다.[23]

정규식 구문

정규식을 지정할 때 대체 구분 기호를 사용하여 Perl일치 및 대체 연산 구문을 단순화할 수도 있다.[24]

예를 들어 다음과 같은 구문을 사용하여 Perl에 간단한 일치 연산을 지정할 수 있다.

$string1 = '낸시는 군중들에게 "헬로 월드!"라고 말했다.;    # 대상 문자열 지정 인쇄하다 $string1 =~ m/[aeiou]+/;                           # 하나 이상의 모음과 일치 

구문은 대체 구분 기호로 일치 작업을 지정할 수 있을 정도로 유연하므로 구분 기호 충돌을 피하기 쉽다.

$string1 = 낸시는 'http:///Hello/World.htm'이 유효한 주소가 아니라고 말했다.; # 대상 문자열     인쇄하다 $string1 =~ m@180://@;       # 대체 정규식 구분 기호를 사용한 일치 인쇄하다 $string1 =~ m{{116://};       # 이전과 동일하지만 다른 구분 기호 인쇄하다 $string1 =~ m!http://!;       # 이전과 같지만 구분 기호는 다르다. 

여기 문서

여기 문서는 특별한 최종 순서를 설명함으로써 임의의 내용을 포함시킬 수 있다.PHP, bash 스크립트, 루비, 을 포함한 많은 언어들이 이것을 지원한다.여기서 문서는 최종 시퀀스를 설명하는 것으로 시작하고 새 라인의 시작 부분에서 해당 시퀀스를 볼 때까지 계속된다.[25]

perl의 예는 다음과 같다.

인쇄하다 <<Endofherdoc; "확실한 캐릭터"로 줄을 인코딩하는 것은 매우 어렵다.  새로운 선, 쉼표 및 기타 문자는 구분 기호 충돌을 유발할 수 있다. Endofherdoc 

이 코드는 다음과 같이 인쇄된다.

"확실한 캐릭터"로 줄을 인코딩하는 것은 매우 어렵다.새로운 선, 쉼표 및 기타 문자는 구분 기호 충돌을 유발할 수 있다. 

특수 종료 시퀀스를 사용함으로써 문자열에는 모든 종류의 문자가 허용된다.

아스키 갑옷

주로 이진 데이터의 텍스트 부호화를 위한 메커니즘으로 사용되지만, ASCII 아머링은 프로그래밍 및 시스템 관리 기법으로, 일부 상황에서 구분자 충돌을 피하는데도 도움이 된다.[26][27]이 기법은 더 복잡하기 때문에 작은 애플리케이션과 단순한 데이터 저장 형식에는 적합하지 않기 때문에 위에서 설명한 다른 접근 방식과 대조된다.이 기술은 전송된 데이터에 구분 기호나 기타 중요한 문자가 나타나지 않도록 base64와 같은 특수한 인코딩 방식을 사용한다.다층 탈출 방지, 즉 더블쿼터 등을 목적으로 한다.

예를 들어 이 기술은 마이크로소프트ASP에서 사용된다.NET 웹 개발 기술이며, 이 시스템의 "VIEWSTATE" 구성요소와 밀접하게 관련되어 있다.[28]

다음의 간단한 예는 이 기법이 실제로 어떻게 작용하는지를 보여준다.

첫 번째 코드 조각은 VIEWSTATE 값에 HTML 태그 자체의 구분자와 호환되지 않는 문자가 포함된 간단한 HTML 태그를 보여준다.

<< input> 타자를 치다"hidden" 이름을 붙이다"__VIEWSTATE" 값어치="BookTitle:낸시는 "라고 말하지 않는다.안녕 세상!" 더 이상." /> 

이 첫 번째 코드 조각은 제대로 형성되지 않았으며, 따라서 "실제" 배치된 시스템에서는 제대로 작동하지 않을 것이다.

임의 텍스트를 HTML 속성에 저장하려면 HTML 엔티티를 사용할 수 있다.이 경우 "&quot;"는 이중 견적을 나타낸다.

<< input> 타자를 치다"hidden" 이름을 붙이다"__VIEWSTATE" 값어치="BookTitle:낸시는 &quot; 라고 말하지 않는다.헬로 월드!&quot;더 이상." /> 

또는 base64와 같이 컨텍스트에 특별한 의미가 있는 문자를 포함하지 않는 모든 인코딩을 사용할 수 있다.

<< input> 타자를 치다"hidden" 이름을 붙이다"__VIEWSTATE" 값어치="Qm9va1RpdGxlOk5hbmN5IGRvZXNuJ3Qgc2F5ICJIZWxbyBXb3JSCEIGFueW1vcmUu" /> 

또는 백분율 인코딩:

<< input> 타자를 치다"hidden" 이름을 붙이다"__VIEWSTATE" 값어치="BookTitle:낸시%20,%27t%20say%20%22헬로%20월드!%22%20anymore." /> 

이렇게 하면 구분자 충돌을 방지할 수 있으며, 원본(디코딩된) 텍스트에 표시되는 문자와 상관없이 호환되지 않는 문자가 HTML 코드 내부에 나타나지 않도록 할 수 있다.[28]

참고 항목

참조

  1. ^ "Definition: delimiter". Federal Standard 1037C - Telecommunications: Glossary of Telecommunication Terms. Archived from the original on 2013-03-05. Retrieved 2019-11-25.
  2. ^ "What is a Delimiter?". www.computerhope.com. Retrieved 2020-08-09.
  3. ^ Rohl, Jeffrey S. (1973). Programming in Fortran. Oxford Oxfordshire: Oxford University Press. ISBN 978-0-7190-0555-8. Fortran 프로그래밍 언어에 따라 Hollerith 표기법으로 방법을 기술한다.
  4. ^ a b de Moor, Georges J. (1993). Progress in Standardization in Health Care Informatics. IOS Press. ISBN 90-5199-114-2. 페이지 141
  5. ^ Friedl, Jeffrey E. F. (2002). Mastering Regular Expressions: Powerful Techniques for Perl and Other Tools. O'Reilly. ISBN 0-596-00289-0. 319 페이지
  6. ^ Scott, Michael Lee (1999). Programming Language Pragmatics. Morgan Kaufmann. ISBN 1-55860-442-1.
  7. ^ a b c Wall, Larry; Orwant, Jon (July 2000). Programming Perl (Third ed.). O'Reilly. ISBN 0-596-00027-8.
  8. ^ Kaufmann, Matt (2000). Computer-Aided Reasoning: An Approach. Springer. ISBN 0-7923-7744-3.페이지 3
  9. ^ Meyer, Mark (2005). Explorations in Computer Science. Oxford Oxfordshire: Oxford University Press. ISBN 978-0-7637-3832-7. 중괄호와 세미콜론이 두드러지게 포함된 C형 프로그래밍 언어를 참조한다.
  10. ^ HTML에 사용되는 구문 및 구분자를 Dilligan, Robert (1998). Computing in the Web Age. Oxford Oxfordshire: Oxford University Press. ISBN 978-0-306-45972-6.설명한다.
  11. ^ a b 문자열 리터럴Schwartz, Randal (2005). Learning Perl. Oxford Oxfordshire: Oxford University Press. ISBN 978-0-596-10105-3.설명한다.
  12. ^ Watt, Andrew (2003). Sams Teach Yourself Xml in 10 Minutes. Oxford Oxfordshire: Oxford University Press. ISBN 978-0-672-32471-0. XML 처리 지침을 설명한다. 페이지 21.
  13. ^ Cabrera, Harold (2002). C# for Java Programmers. Oxford Oxfordshire: Oxford University Press. ISBN 978-1-931836-54-8. 단일 회선 및 다중 회선 코멘트를 설명한다. 페이지 72.
  14. ^ "Smarty Template Documentation". Retrieved 2010-03-12. 예: 스마트 템플릿 시스템 설명서, "탈출 템플릿 구분 기호"를 참조하십시오.
  15. ^ "The set of control characters for ISO 646" (PDF). International Organization for Standardization. December 1, 1975.
  16. ^ "ASCII graphic character set" (PDF). International Organization for Standardization. December 1, 1975.
  17. ^ Lewine, Donald (1991). Posix Programmer's Guide. Oxford Oxfordshire: Oxford University Press. ISBN 978-0-937175-73-6. 제어-z 페이지 156,
  18. ^ Friedl, Jeffrey (2006). Mastering Regular Expressions. Oxford Oxfordshire: Oxford University Press. ISBN 978-0-596-52812-6. 임베디드-임베디터 문제에 대한 해결책을 기술하는 것. 페이지 472.
  19. ^ ASCII 구분 텍스트 대 CSV 및 탭 구분 토론
  20. ^ Kahrel, Peter (2006). Automating InDesign with Regular Expressions. O'Reilly. p. 11. ISBN 0-596-52937-6.
  21. ^ Yukihiro, Matsumoto (2001). Ruby in a Nutshell. O'Reilly. ISBN 0-596-00214-9. Ruby에서 이것들은 일반 구분 문자열로 표시된다. 페이지 11
  22. ^ Network Protocols Handbook. Javvin Technologies Inc. 2005. ISBN 0-9740945-2-8. 26 페이지
  23. ^ Computational Linguistics and Intelligent Text Processing. Oxford Oxfordshire: Oxford University Press. 2001. ISBN 978-3-540-41687-6. 공백 구분 기호를 설명한다. 페이지 258.
  24. ^ Friedl, Jeffrey (2006). Mastering Regular Expressions. Oxford Oxfordshire: Oxford University Press. ISBN 978-0-596-52812-6. 472쪽
  25. ^ Perl 연산자 및 우선 순위
  26. ^ Rhee, Man (2003). Internet Security: Cryptographic Principles, Algorithms and Protocols. John Wiley and Sons. ISBN 0-470-85285-2.(암호화 애플리케이션에서 ASCII 아머링의 사용 예)
  27. ^ Gross, Christian (2005). Open Source for Windows Administrators. Charles River Media. ISBN 1-58450-347-5.(암호화 애플리케이션에서 ASCII 아머링의 사용 예)
  28. ^ a b Kalani, Amit (2004). Developing and Implementing Web Applications with Visual C# . NET and Visual Studio . NET. Que. ISBN 0-7897-2901-6.(HTML 소스 코드 내에서 Base64 인코딩 및 VIEWSTATE 사용 설명)

외부 링크