UTF-8 대신 ASCII 인코딩을 선택하면 어떤 이점이 있습니까?

ASCII의 모든 문자는 저장 공간을 늘리지 않고 UTF-8을 사용하여 인코딩 할 수 있습니다 (둘 다 저장 공간이 필요함).

UTF-8은 “ASCII 문자”이상의 문자 지원의 추가 이점을 제공합니다. 그렇다면 UTF-8 대신 ASCII 인코딩을 절대 선택하는 이유는 무엇입니까?

UTF-8 대신 ASCII를 선택할 때 사용 사례가 있습니까?

댓글

  • 기존 자료를 지원하려면 …
  • UTF8이 유산 임을 의미합니다. ASCII도 지원합니다. 따라서 기존 항목을 지원해야하는 경우에도 UTF8은 다른 변경이 필요없이 잘 작동합니다.
  • 아마도 ‘와 상호 운용해야합니다. 8 개의 ASCII 문자를 7 바이트로 압축하는 시스템? 사람들은 미친 작업을 수행했습니다.
  • 미친다고 부르지 만 저는 ‘ d는 보안과 안정성을 말합니다. 다중 바이트 시퀀스가없는 문자 집합은 깨지기가 훨씬 더 어렵습니다. 인간 언어 지원이 중요한 ASCII 승리라고해도 ‘ 오해하지 마십시오. ‘ 잘라 내지 않습니다.하지만 ‘ 그냥 기본적인 프로그래밍 만하고 네이티브 언어에 익숙해 질 수 있다면 컴파일러와 연산이 g 시스템이 작성된 이유는 무엇입니까? @Donal Fellows. 마지막으로 확인한 … ASCII는 7 바이트입니다. (추가 비트가있는 것은 ‘ ASCII가 아니며 문제를 요구합니다)
  • @ebyrob Donal Fellows는 8 개의 ASCII 기호를 7 바이트로 묶는 비트를 의미한다고 생각합니다. , 각 심볼은 각각 7 비트를 사용하기 때문에 … 8 * 7 = 56 비트 = 7 바이트입니다. 8 개 중 1 바이트를 저장하기위한 특수 인코딩 및 디코딩 기능을 의미합니다.

Answer

경우에 따라 개별 캐릭터에 대한 액세스 속도를 높일 수 있습니다. UTF8 및 ASCII로 인코딩 된 문자열 str="ABC"를 상상해보십시오 (언어 / 컴파일러 / 데이터베이스가 인코딩에 대해 알고 있다고 가정)

세 번째 액세스 (C) 많은 프로그래밍 언어에있는 배열 액세스 연산자를 사용하여이 문자열에서 문자를 c = str[2]와 같이 수행합니다.

이제 , 문자열이 ASCII로 인코딩 된 경우, 우리가해야 할 일은 문자열에서 세 번째 바이트를 가져 오는 것입니다.

그러나 문자열이 UTF-8로 인코딩 된 경우 먼저 첫 번째 문자가 1 바이트 또는 2 바이트 문자인지 확인해야합니다. 그런 다음 두 번째 문자에 대해 동일한 확인을 수행해야합니다. 세 번째 문자. 성능 차이는 클수록 문자열이 길어집니다.

이는 UTF-8로 인코딩 된 VARCHAR “뒤”에있는 열의 시작을 찾는 일부 데이터베이스 엔진에서 문제가됩니다. , 데이터베이스는 VARCHAR 필드에있는 문자 수뿐만 아니라 각 문자가 사용하는 바이트 수를 확인해야합니다.

댓글

  • 데이터베이스가 ‘ ” 문자 수 ” ” 바이트 수 “, 그런 다음 ‘ ‘에 몇 가지 문제가 있습니다 …
  • TBH 둘 중 하나를 저장할 데이터베이스가 없습니다 …
  • @Mchl : 방법 데이터베이스가 문자열의 끝에 도달 한시기를 알고 있다고 상상하십니까?
  • 일반적으로 0x00 또는 0x0000에 도달하여
  • @DeanHarding 문자 수는 두 번째 문자가 시작되는 위치를 어떻게 알려주나요? ? 아니면 데이터베이스에도 각 문자 오프셋에 대한 인덱스가 있어야합니까? 참고 : ‘ 2 자뿐 아니라 최대 4 자일 수 있습니다 (‘ s 6 인 경우 제외). stackoverflow.com/questions/9533258/ … . (나는 ‘ 시스템을 파괴 할 수있는 정말 긴 혐오감을 가진 유일한 utf-16이라고 생각합니다)

답변

UTF-8의 US-ASCII (또는 ISO 646) 하위 집합 만 사용하려는 경우 둘 중 하나에 실질적인 이점이 없습니다. 사실, 모든 것이 동일하게 인코딩됩니다.

US-ASCII 문자 집합을 넘어서서 일반적으로 사용되는 악센트, 움라우트 등이있는 문자를 사용하는 경우 (예 : 서유럽 언어에는 차이가 있습니다. 대부분은 여전히 ISO 8859에서 단일 바이트로 인코딩 할 수 있지만 UTF-8로 인코딩 할 때는 2 바이트 이상이 필요합니다. 물론 단점도 있습니다. ISO 8859에서는 사용할 인코딩을 지정하기 위해 대역 외 수단을 사용해야하며 한 번에 하나 의 언어 만 지원합니다. 예를 들어 모든 키릴 문자 (러시아어, 벨로루시 아어 등)를 인코딩 할 수 있습니다.) 알파벳은 한 바이트 씩만 사용하지만, 프랑스어 또는 스페인어 문자 (US-ASCII / ISO 646 하위 집합에있는 문자 제외)와 혼합해야하거나 혼합하려면 “거의 운이 좋지 않습니다. 이를 위해 문자 세트를 변경하십시오.

ISO 8859는 실제로 유럽 알파벳에만 유용합니다. 대부분의 중국어, 일본어, 한국어, 아라비아어 등 알파벳에서 사용되는 대부분의 알파벳을 지원하려면 다음을 사용해야합니다. 일부 완전히 다른 인코딩입니다.이 중 일부 (예 : 일본어의 경우 Shift JIS)는 처리하기에 절대적인 고통입니다. 지원할 가능성이있는 경우 유니 코드를 사용하는 것이 좋습니다. 케이스.

Answer

ANSI는 여러 가지가 될 수 있으며, 대부분은 이와 관련하여 8 비트 문자 집합입니다 (예 : Windows).

아마도 7 비트이고 UTF-8의 적절한 하위 집합 인 ASCII를 생각하고 계셨을 것입니다. 즉 유효한 ASCII 스트림은 유효한 UTF-8 스트림이기도합니다.

8 비트 문자 집합을 생각하고 있다면 매우 중요한 이점은 모든 표현 가능한 문자가 정확히 8 비트라는 것입니다. -8 최대 24 비트까지 가능합니다.

댓글

  • 예, ‘ 7 비트 ASCII 세트. utf-8 대신 ascii로 무언가를 저장하는 데 필요한 한 가지 이점을 생각할 수 있습니까? (어쨌든 7 비트는 8 비트로 저장되므로 파일 크기는 정확히 동일합니다.)
  • 유니 코드 값 127보다 큰 문자가있는 경우 ASCII로 저장할 수 없습니다.
  • @Pacerier : 모든 ASCII 문자열은 UTF-8 문자열 이므로 차이가 없습니다 . 인코딩 루틴은 사용하는 플랫폼의 문자열 표현에 따라 더 빠를 수 있습니다 , 비록 상당한 속도 향상을 기대하지는 않지만 ‘ 당신은 상당한 손실을 입습니다. 유연성.
  • @Thor 이것이 바로 ‘ ASCII로 저장하는 것이 이점이 있는지 묻는 이유입니다.
  • @Pacerier, XML을 ASCII로 저장하면 다음을 사용해야합니다. & # 160; 깨지지 않는 공간을 위해. 이것은 더 채워지지만 데이터가 ISO-Latin-1 대 UTF-8 인코딩 오류에 대해 더 내성을 갖도록 만듭니다. 이것이 우리의 기본 플랫폼이 캐릭터와 함께 많은 보이지 않는 마법을 수행하기 때문에 우리가하는 일입니다. ASCII로 유지하면 데이터가 더욱 강력 해집니다.

답변

예, 여전히 ASCII가 사용되는 일부 사용 사례가 있습니다. 의미 : 파일 형식 네트워크 프로토콜 . 특히 다음과 같은 경우에 사용합니다.

  • 컴퓨터 프로그램에서 생성 및 소비 한 데이터가 최종 사용자에게 제공되지 않습니다.
  • 하지만 유용한 경우 프로그래머는 개발 및 디버깅의 용이성을 위해 읽을 수 있어야합니다.

ASCII를 인코딩으로 사용하면 사람이 읽을 수있는 정도는 유지하면서 멀티 바이트 인코딩의 복잡성을 피할 수 있습니다.

몇 가지 예 :

  • HTTP 는 옥텟 시퀀스로 정의 된 네트워크 프로토콜입니다. 그러나 “GET”, “POST”, “Accept-Language”등과 같은 단어의 ASCII 인코딩에 해당하는 것은 (적어도 영어를 사용하는 프로그래머에게는) 매우 유용합니다.
  • The PNG 이미지 형식의 청크 유형 은 4 개의 옥텟으로 구성되지만 는”이미지 데이터 “를 의미하고 PLTE는”팔레트 “를 의미합니다.

물론 데이터가 실제로 최종 사용자에게 표시되지 않도록 주의하십시오. 왜냐하면 데이터가 최종 사용자에게 표시되면 (URL의 경우처럼) 사용자는 해당 데이터를 올바르게 기대할 수 있기 때문입니다. 읽을 수있는 언어로 작성해야합니다.

댓글

  • 그렇습니다. 지구상에서 가장 많은 유니 코드를 전송하는 프로토콜 인 HTTP가 ASCII 만 지원하면된다는 점은 ‘ 약간 아이러니합니다. (사실 TCP와 IP, 바이너리 지원, ASCII 지원도 마찬가지라고 생각합니다. ‘이 스택 수준에서 필요한 모든 것입니다.)

답변

우선 : 제목은 / d ANSI를 사용하고 텍스트에서는 ASCII를 참조합니다. ANSI는 ASCII와 같지 않습니다. ANSI는 ASCII 세트를 통합합니다. 그러나 ASCII 세트는 처음 128 개의 숫자 값 (0-127)으로 제한됩니다.

모든 데이터가 ASCII (7 비트)로 제한되면 UTF-8을 사용하는지 여부는 중요하지 않습니다. , ANSI 또는 ASCII는 ANSI 및 UTF-8 모두 전체 ASCII 집합을 통합합니다. 즉, 0에서 127까지의 숫자 값은 ASCII, ANSI 및 UTF-8에서 정확히 동일한 문자를 나타냅니다.

ASCII 집합 이외의 문자가 필요한 경우 인코딩을 선택해야합니다. ANSI를 사용할 수 있지만 모든 다른 코드 페이지의 문제가 발생합니다.컴퓨터 A에 파일을 만들고 컴퓨터 B에서 읽으면 이러한 컴퓨터가 다른 코드 페이지를 사용하도록 설정되어 있으면 재미있는 텍스트가 생성 될 수 있습니다. 숫자 값 nnn은 이러한 코드 페이지에서 다른 문자를 나타 내기 때문입니다.

이 “코드 페이지 지옥”이 유니 코드 표준 이 정의 된 이유입니다. UTF-8은 해당 표준의 단일 인코딩이지만 더 많이 있습니다. UTF-16은 Windows의 기본 인코딩이므로 가장 널리 사용됩니다.

따라서 ASCII 집합의 128 자 이상의 문자를 지원해야하는 경우

UTF-8 . 이렇게하면 사용자가 시스템을 설정 한 코드 페이지에 대해 걱정할 필요가 없습니다.

설명

  • 128 자 이상을 지원할 필요가없는 경우 UTF8 인코딩 대신 ACSII 인코딩을 선택하면 어떤 이점이 있습니까?
  • 자신을 128 자로 제한하는 것 외에? 별로. UTF-8은 특별히 ANSI가 필요한 ” 만 ” ASCII 및 대부분의 서구 언어를 지원하도록 설계되었습니다. UTF-8은 상대적으로 적은 수의 상위 ANSI 문자 만 1 바이트 이상 인코딩한다는 것을 알 수 있습니다. 대부분의 HTML 페이지에서 UTF-8을 기본값으로 사용하는 이유가 있습니다 …
  • @Pacerier, 127 이상의 인코딩이 필요하지 않은 경우 ‘, UTF는 추가 바이트를 동일한 문자로 간주하기 위해 추가 비트 확인이 필요하기 때문에 일부 API를 사용하여 인코딩 / 디코딩 할 때 ASCII를 선택하는 것이 좋습니다. 확인없이 8 비트 만 읽는 순수한 ASCII 대신 추가 계산이 필요할 수 있습니다. 하지만 대규모 (대용량) 계산에서 높은 수준의 최적화가 정말로 필요하고 해당 최적화에서 수행하는 작업을 ‘ 알고있는 경우에만 ASCII를 사용하는 것이 좋습니다. 그렇지 않은 경우 UTF-8을 사용하십시오.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다