유니 코드, UTF, ASCII, ANSI 형식 차이


351

사이의 차이는 무엇입니까 Unicode, UTF8, UTF7, UTF16, UTF32, ASCII, 및 ANSI인코딩은?

이것들은 프로그래머에게 어떤 도움이됩니까?


참조하기 가장 좋은 사이트는 다음과 같습니다. msdn.microsoft.com/en-us/library/dd374081(VS.85).aspx
RamSri



답변:


470

리스트 내려 가기 :

  • " 유니 코드 (Unicode) "는 인코딩이 아니지만 불행히도 많은 문서에서 특정 시스템이 기본적으로 사용하는 유니 코드 인코딩을 참조하기 위해이 문서를 부정확하게 사용합니다. Windows 및 Java에서 이것은 종종 UTF-16을 의미합니다. 다른 많은 곳에서는 UTF-8을 의미합니다. 적절하게 유니 코드는 특정 인코딩이 아닌 추상 문자 집합 자체를 나타냅니다.
  • UTF-16 : "코드 단위"당 2 바이트 이것은 .NET에서, 그리고 일반적으로 Windows와 Java에서 문자열의 기본 형식입니다. BMP ( Basic Multilingual Plane) 외부의 값 은 서로 게이트 쌍으로 인코딩됩니다. 이들은 수 없습니다하는 데 상대적으로 거의 사용,하지만 지금은 많은 소비자 응용 프로그램을 지원 이모티콘하기 위해 비 BMP 문자 인식해야합니다.
  • UTF-8 : 가변 길이 인코딩, 코드 포인트 당 1-4 바이트. ASCII 값은 1 바이트를 사용하여 ASCII로 인코딩됩니다.
  • UTF-7 : 일반적으로 메일 인코딩에 사용됩니다. 당신이 필요하다고 생각하고 당신이 메일을하지 않는 경우에, 당신은 잘못된 것입니다. (이것은 사람들이 뉴스 그룹 등에 게시하는 것에 대한 나의 경험 일뿐입니다. 메일 외부에서는 전혀 널리 사용되지 않습니다.)
  • UTF-32 : 코드 포인트 당 4 바이트를 사용하는 고정 너비 인코딩 이것은 매우 효율적이지 않지만 BMP 외부의 삶을 더 쉽게 만듭니다. 원하는 경우 MiscUtil 라이브러리의 Utf32String일부로 .NET 클래스 가 있습니다. (매우 철저하게 테스트되지는 않았습니다.)
  • ASCII : 하위 7 비트 만 사용하는 단일 바이트 인코딩. (유니 코드 코드 포인트 0-127) 악센트 등이 없습니다.
  • ANSI : 고정 된 ANSI 인코딩은 없습니다. 많은 인코딩이 있습니다. 일반적으로 사람들이 "ANSI"라고 말하면 Encoding.Default 를 통해 얻은 "내 시스템의 기본 로캘 / 코드 페이지"를 의미 하며 종종 Windows-1252 이지만 다른 로캘 일 수 있습니다.

유니 코드 페이지 에 더 많은 정보유니 코드 문제를 디버깅하기위한 팁이 있습니다 .

코드의 또 다른 큰 자원은 unicode.org 인데, 여기에는 당신이 할 수있는 것보다 더 많은 정보가 들어 있습니다. 아마도 가장 유용한 비트는 코드 차트 일 것 입니다.


6
Microsoft의 8 비트 코드 페이지에 적용될 때 "ANSI"라는 용어는 잘못되었습니다. ANSI 표준화를 위해 제출 된 초안을 기반으로했지만 ANSI 자체는이를 표준화하지 않았습니다. Windows-1252 (가장 일반적으로 "ANSI"라고하는 코드 페이지)는 ISO 8859-1 (Latin-1)과 비슷하지만 Windows-1252의 인쇄 가능 문자 범위는 0x80..0x9F이며 여기서 ISO 8859-1 해당 범위에 제어 문자가 있습니다. 유니 코드에는 해당 범위의 제어 문자가 있습니다. en.wikipedia.org/wiki/Windows_code_page
Keith Thompson

1
@ jp2code : 그렇지는 않지만 "웹 서버에서 HTTP를 통해 다시 전송 된 내용"과 "이메일을 통해 전송 된 내용"을 구별해야합니다. 이메일을 보내는 것은 웹 페이지 내용이 아니라 그 뒤에있는 앱일 것입니다. 웹 컨텐츠는 UTF-8에서 가장 좋습니다. 메일 내용 UTF-7 일 수 있지만 요즘 UTF-8로 유지하는 것이 좋습니다.
Jon Skeet

2
UTF-16, IMHO의 경우 BMP 외부의 코드 포인트가 서로 게이트 쌍으로 2 개의 코드 단위 (4 바이트)로 인코딩되므로 "코드 단위당 2 바이트"라고 말합니다.
Ludovic Kuty

1
UTF-16LE (.NET 내)와 BE의 차이점과 BOM 개념이 누락되었습니다.
Maarten Bodewes

2
@Andrew : 아니요. (일반) 인코딩 마커가 없습니다. Windows 1252는 유니 코드 BOM을 나타낼 수 없으며, 어쨌든 문자 당 1 바이트 인코딩이므로 의미가 없습니다.
존 스키트

68

문자 인코딩을 시작하는 데 도움이되는 내용 : Joel on Software : 절대 최소 모든 소프트웨어 개발자는 절대적으로 유니 코드 및 문자 집합에 대해 알아야합니다 (변명 없음)

그건 그렇고-ASP.NET은 그것과 아무런 관련이 없습니다. 인코딩은 보편적입니다.


7
기사가 작성된 후 6 년 동안 여기에 대답했습니다. 게시물이 작성된 후 8 년이 지나서 읽었습니다. 14 년이 지난 지금도 여전히 좋은 평가를 받고 있습니다. 그것은 내 인생의 절반 이상입니다. 놀랄 만한.
Dave Knise 's August 1'17
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.