2017-12-02 6 views
1

JSON specification 상태 + 0000 U + 001F에 :제어 문자 이스케이프해야합니다 문자는 U에서 코드에있는 제어

7. Strings 

    The representation of strings is similar to conventions used in the C 
    family of programming languages. A string begins and ends with 
    quotation marks. All Unicode characters may be placed within the 
    quotation marks, except for the characters that must be escaped: 
    quotation mark, reverse solidus, and the control characters (U+0000 
    through U+001F). 
탈출의

주요 아이디어 때 출력에 손상을주지 않도록하는 것입니다 터미널 또는 종이에 JSON 문서 또는 메시지를 인쇄합니다.

그러나 다른 제어 문자는 [DEL] from C0 and other control characters from C1 set (U+0080 through U+009F)입니다. JSON 문자열에서도 이스케이프 처리하면 안됩니까? JSON specification 가입일

답변

0

:

8. String and Character Issues 

8.1. Character Encoding 

    JSON text SHALL be encoded in UTF-8, UTF-16, or UTF-32. 

UTF-8에서, 상기 모든 코드 포인트 (127)는 다수의 바이트로 인코딩된다. 해당 바이트의 약 절반이 C1 제어 문자 범위에 있습니다. 따라서 UTF-8로 인코딩 된 JSON 문자열에 해당 바이트를 두지 않으려면 모든 코드 포인트를 이스케이프 처리해야합니다. 이것은 UTF-8의 사용을 효과적으로 제거하고 JSON 문자열은 ASCII로 인코딩 될 수 있습니다. ASCII는 UTF-8의 서브 세트이므로 표준에 의해 허용되지 않습니다. 따라서 바이트 스트림에 C1 제어 문자를 넣는 것만으로도 이스케이프 처리되지만 모든 JSON 표현에 ASCII를 사용하도록 요구하는 것은 영어 환경 이외의 환경에서는 크게 비효율적입니다.

UTF-16 및 UTF-32는 C1 (또는 심지어 C0) 제어 문자를 사용하는 것으로 해석 할 수 없으므로 해당 인코딩에 대한 요점은 아닙니다.

+0

이스 케이 핑은 문자 집합 인코딩과 아무 관련이 없습니다. 구문과 관련이 있습니다. 'String' (일단 파일이 문자 인코딩으로 디코드되고 이스케이프 된 이스케이프되지 않은)은 파일 인코딩에 관계없이 UTF-16 코드 단위의 어떤 유한 시퀀스 ('String'이 의미하는 것)를 가질 수 있습니다. –

+0

@TomBlodget JSON 문자열을 나타내는 데 사용되는 바이트에 영향을주는 이스케이프와 인코딩이 모두 사용된다는 점에서이 둘은 연결되어 있습니다. C1 컨트롤을 실제로 사용하는 대부분의 시스템은 UTF를 전혀 처리 할 수 ​​없거나 ESC 바이트로 시작하는 다중 코드 포인트 표현을 사용합니다. 따라서 JSON이 UTF 형식으로 인코딩된다는 것은 작동 할 수있는 시스템이 JSON 문자열에 나타나는 C1 코드 포인트를 신경 쓰지 않는다는 것을 의미합니다. – Rick