ASCII의 모든 문자는 스토리지를 늘리지 않고도 UTF-8을 사용하여 인코딩 할 수 있습니다 (둘 다 스토리지 바이트 필요).
UTF-8은 "ASCII-characters"이외의 문자 지원 이점을 제공합니다. 그런 경우에는, 우리는 왜 것 이제까지 UTF-8을 통해 ASCII 인코딩을 선택 하는가?
UTF-8 대신 ASCII를 선택할 때 유스 케이스가 있습니까?
ASCII의 모든 문자는 스토리지를 늘리지 않고도 UTF-8을 사용하여 인코딩 할 수 있습니다 (둘 다 스토리지 바이트 필요).
UTF-8은 "ASCII-characters"이외의 문자 지원 이점을 제공합니다. 그런 경우에는, 우리는 왜 것 이제까지 UTF-8을 통해 ASCII 인코딩을 선택 하는가?
UTF-8 대신 ASCII를 선택할 때 유스 케이스가 있습니까?
답변:
경우에 따라 개별 문자에 대한 액세스 속도를 높일 수 있습니다. str='ABC'
UTF8 및 ASCII로 인코딩 된 문자열을 상상해보십시오 (언어 / 컴파일러 / 데이터베이스가 인코딩에 대해 알고 있다고 가정)
C
많은 프로그래밍 언어로 된 배열 액세스 연산자를 사용 하여이 문자열에서 세 번째 ( ) 문자에 액세스하려면 다음과 같이하십시오 c = str[2]
.
이제 문자열이 ASCII로 인코딩 된 경우 문자열에서 세 번째 바이트를 가져 오기만하면됩니다.
그러나 문자열이 UTF-8로 인코딩 된 경우 첫 번째 문자가 1 또는 2 바이트 문자인지 먼저 확인해야하며 두 번째 문자에 대해 동일한 검사를 수행해야하며 세 번째 문자에만 액세스 할 수 있습니다. 성능 차이가 클수록 줄이 길어집니다.
예를 들어 UTF-8로 인코딩 된 VARCHAR 뒤에 '열'이있는 열의 시작 부분을 찾을 수있는 일부 데이터베이스 엔진의 경우 데이터베이스에서 VARCHAR 필드에 몇 개의 문자가 있는지 확인해야 할뿐만 아니라 그들 각각이 사용하는 많은 바이트.
UTF-8의 US-ASCII (또는 ISO 646) 서브 세트 만 사용하려는 경우에는 서로에게 실질적인 이점이 없습니다. 실제로 모든 것이 동일하게 인코딩됩니다.
US-ASCII 문자 세트를 넘어서 전형적인 서유럽 언어로 사용되는 악센트, 움라우트 등의 문자를 사용하는 경우 (예 :) 차이가 있습니다. ISO 8859에서 단일 바이트로 인코딩되지만 UTF-8로 인코딩 된 경우 둘 이상의 바이트가 필요합니다. ISO 8859은 당신이 밴드 중 일부는 사용되는 인코딩을 지정하는 것을 의미한다 사용하는 것이 필요하며, 그것은 단지 지원이 단점은 물론, 또한 하나한 번에 이러한 언어의. 예를 들어, 키릴 문자 (러시아어, 벨로루시 아어 등) 알파벳의 모든 문자를 1 바이트 만 사용하여 인코딩 할 수 있지만 프랑스어 나 스페인어 문자 (미국 -ASCII 이외의 문자)와 혼합해야하는 경우 / ISO 646 하위 집합) 운이 좋지 않습니다. 문자 세트를 완전히 변경해야합니다.
ISO 8859는 실제로 유럽 알파벳에만 유용합니다. 대부분의 중국어, 일본어, 한국어, 아라비아 등의 알파벳에 사용되는 대부분의 알파벳을 지원하려면 완전히 다른 인코딩을 사용해야합니다. 이들 중 일부 (예 : 일본어의 경우 JIS JIS)는 처리해야 할 절대적인 고통입니다. 당신이 그들을 지원하고 싶을 가능성이 있다면, 만약을 위해 유니 코드를 사용하는 것이 가치 있다고 생각합니다.
ANSI는 여러 가지 일 수 있으며, 대부분 Windows 8의 경우 코드 페이지 1252와 같이 8 비트 문자 세트입니다.
아마도 당신은 7 비트 ASCII 및 UTF-8의 적절한 서브 세트 인 ASCII를 생각하고 있었을 것입니다. 즉, 유효한 ASCII 스트림도 유효한 UTF-8 스트림입니다.
8 비트 문자 집합을 생각할 때 매우 중요한 장점 중 하나는 표현 가능한 모든 문자가 정확히 8 비트이며 UTF-8에서 최대 24 비트 일 수 있다는 것입니다.
예, ASCII가 의미있는 사용 사례가 여전히 있습니다 : 파일 형식 및 네트워크 프로토콜 . 특히 다음과 같은 용도로 사용됩니다.
ASCII를 인코딩으로 사용하면 사람이 읽을 수있는 수준을 유지하면서 멀티 바이트 인코딩의 복잡성을 피할 수 있습니다.
몇 가지 예 :
IDAT
"이미지 데이터"를 PLTE
의미하고 "팔레트" 를 의미 하는 PNG 인코더 또는 디코더를 프로그래밍하는 경우 유용합니다 .물론 데이터가 실제로 최종 사용자에게 표시 되지 않도록주의해야합니다 .URL의 경우처럼 데이터가 표시되면 사용자는 데이터가 올바르게 표시되기를 기대하기 때문입니다. 읽을 수있는 언어로.
우선, 제목은 / d ANSI를 사용하지만 텍스트에서는 ASCII를 나타냅니다. ANSI는 ASCII와 같지 않습니다. ANSI는 ASCII 세트를 통합합니다. 그러나 ASCII 세트는 처음 128 개의 숫자 값 (0-127)으로 제한됩니다.
모든 데이터가 ASCII (7 비트)로 제한되는 경우 ANSI 및 UTF-8이 전체 ASCII 세트를 통합하므로 UTF-8, ANSI 또는 ASCII를 사용하는지 여부는 중요하지 않습니다. 즉, 0에서 127까지의 숫자 값은 ASCII, ANSI 및 UTF-8에서 정확히 동일한 문자를 나타냅니다.
ASCII 집합 이외의 문자가 필요한 경우 인코딩을 선택해야합니다. ANSI를 사용할 수는 있지만 다른 모든 코드 페이지의 문제가 발생합니다. 머신 A에서 파일을 작성하고 머신 B에서 파일을 읽으면이 코드 페이지에서 숫자 값 nnn이 다른 문자를 나타 내기 때문에이 코드가 다른 코드 페이지를 사용하도록 설정된 경우 재미있는 텍스트를 생성 할 수 있습니다.
이 "코드 페이지 지옥"은 유니 코드 표준 이 정의 된 이유 입니다. UTF-8은 해당 표준의 단일 인코딩이지만 더 많은 것이 있습니다. UTF-16은 Windows의 기본 인코딩이므로 가장 널리 사용됩니다.
따라서 ASCII 세트의 128 자 이상을 지원해야하는 경우 UTF-8을 사용하는 것이 좋습니다. 그렇게하면 문제가되지 않으며 사용자가 시스템을 설정 한 코드 페이지에 대해 걱정할 필요가 없습니다.