.NET Framework StreamReader / Writer가 UTF8 인코딩에 기본값이있는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/856990

문제

StreamReader / Writer의 생성자를보고 있는데 UTF8을 기본값으로 사용합니다. 이것이 왜 그런지 아는 사람이 있습니까? 나는 그것이 유니 코드에 기본적으로 더 안전한 내기 였을 것이라고 추정했을 것이다.

도움이 되었습니까?

해결책

UTF-8은 ASCII 문서와 함께 작동하며 일반적으로 UTF-16보다 더 작습니다. 그러나 여전히 유니 코드 전체를 다룹니다. UTF-8이라고 말하고 싶습니다 멀리 UTF-16보다 더 일반적입니다. 또한 XML의 기본값입니다 (BOM이없고 명시 적 인코딩이 지정되지 않은 경우).

UTF-16에 기본값이 더 낫다고 생각하는 이유는 무엇입니까? (그게 뭐야 Encoding.Unicode 이다.)

편집 : UTF-8이 처리 할 수있는 것에 대해 정확히 혼란스러워한다고 생각합니다. 이 페이지 특정 유니 코드 문자가 어떻게 인코딩되는지를 포함하여 그것을 명확하게 설명합니다. 가변 폭 인코딩이지만 유니 코드 전체를 다룹니다.

다른 팁

UTF8 ~이다 유니 코드,보다 구체적으로 유니 코드 인코딩 유형 중 하나.

더 중요한 것은 ASCII와 호환되는 역전과 XML 및 HTML의 표준 기본값입니다.

"유니 코드"는 표준의 이름이므로 "유니 코드"와 같은 인코딩은 없습니다. 오히려 두 가지 매핑 방법이 있습니다. UTF 그리고 UCS.

"왜"부분에 관해서는 UTF-8은 ASCII와 최대의 호환성을 갖습니다.

다른 모든 사람들이 이미 말했듯이 UTF-8은 유니 코드 내에서 인코딩 표준입니다. UTF-8은 변수 수의 바이트를 사용하여 모든 유니 코드 문자를 인코딩합니다.

모든 ASCII 문자는 그대로 표시되므로 ASCII 파일은 이제 더 이상 고고로 읽을 수 있습니다. 스트림의 바이트에 8 번째 비트 (가장 높은 비트,> 127)가 설정 되 자마자 독자는 <128이 될 때까지 다음 바이트와 결합하도록 독자가 트리거합니다. 그런 다음 조합은 1 캐릭터로 간주됩니다.

라틴어 -1 (ANSII)에는 두 문자를 사용하여 인코딩되는 문자가 있습니다. 예를 들어 É는 e 및 ´로 인코딩됩니다. 길이 ( 'é') 따라서 2입니다.

Windows는 내부적으로 UTF-16을 사용하여 인코딩 가능한 문자를 64K로 제한하는데, 이는 결코 모든 유니드 문자가 아닙니다. 당분간 UTF-32는 모든 캐릭터를 허용하지만 인위적으로 제한적입니다. 그리고 둘 다 ascii와 호환되지 않습니다.

A = ASCII h41 = UTF-8 h41 = UTF-16 h0041 = UTF-32 h00000041

작은 엔디 어인 인코딩도 있습니다.

A = UTF-16 big endian h0041 = UTF-16 little endian h4100

UTF16 또는 UTF32를 사용하여 파일을 저장한다고 상상해보십시오. ASCII 및 UTF-8 (ASCII 문자 만 사용되는 경우 UTF-8)과 비교하여 (텍스트 파일의 경우) 크기가 두 배 또는 사각형입니다. UTF-8은 미래의 향상을 위해서도 유니 코드 표준의 모든 문자를 허용 할뿐만 아니라 공간을 효율적으로 저장합니다.

일반적으로 파일의 첫 두 바이트, BOM 또는 바이트 주문 마커, 인코딩 표준이 사용되는 것을 알려줍니다. 생략하면 XML 및 StreamRedaer는 UTF-8을 사용합니다. ASCII 파일에는 BOM이 없으므로 대부분의 경우 올바르게 읽습니다. 모든 라틴어 1을 사용하는 파일에 해당되지 않을 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top