문제

UTF와 UC의 차이점은 무엇입니까?

C ++ 문자열에서 유럽 문자 세트 (UTF 사용)가 아닌 가장 좋은 방법은 무엇입니까? 다음에 대한 귀하의 추천을 알고 싶습니다.

  • 코드 내부의 내부 표현
    • 런타임에 문자열 조작
    • 디스플레이 목적으로 문자열을 사용합니다.
  • 최고의 스토리지 표현 ( 파일)
  • 와이어 전송 형식 (다른 아키텍처에있을 수 있고 다른 표준 로케일이있는 응용 프로그램 간 전송)
도움이 되었습니까?

해결책

UTF와 UC의 차이점은 무엇입니까?

UCS 인코딩은 고정 너비이며 각 문자마다 사용되는 바이트 수로 표시됩니다. 예를 들어 UCS-2는 문자 당 2 바이트가 필요합니다. 사용 가능한 범위 외부의 코드 포인트가있는 문자는 UCS 인코딩에서 인코딩 할 수 없습니다.

UTF 인코딩은 가변 너비이며 문자를 저장하기 위해 최소 비트 수로 표시됩니다. 예를 들어, UTF-16은 문자 당 최소 16 비트 (2 바이트)가 필요합니다. 대형 코드 포인트가있는 문자는 UTF-16의 Astral 문자에 대해 더 많은 수의 바이트를 사용하여 인코딩됩니다.

  • 코드 내부의 내부 표현
  • 최고의 스토리지 표현 (예 : 파일)
  • 와이어 전송 형식 (다른 아키텍처에있을 수 있고 다른 표준 로케일이있는 응용 프로그램 간 전송)

최신 시스템의 경우 가장 합리적인 저장 및 전송 인코딩은 UTF-8입니다. 기존 메일 서버의 경우 UTF-7, 제대로 작성되지 않은 텍스트 편집기의 경우 UTF-16 (UTF-16)이 적절할 수있는 특별한 경우가 있지만 UTF-8이 가장 일반적입니다.

선호하는 내부 표현은 플랫폼에 따라 다릅니다. Windows에서는 UTF-16입니다. 유닉스에서는 UCS-4입니다. 각각은 좋은 점이 있습니다.

  • UTF-16 문자열은 UCS-4 문자열보다 더 많은 메모리를 사용하지 않습니다. 기본 다국어 평면 (BMP)에 캐릭터가있는 많은 큰 문자열을 저장하는 경우 UTF-16은 UCS-4보다 훨씬 적은 공간이 필요합니다. BMP 외부에서는 같은 양을 사용합니다.
  • UCS-4는 추론하기가 더 쉽습니다. UTF-16 문자는 여러 "대리 쌍"에 분할 될 수 있으므로 문자열을 올바르게 분할하거나 렌더링하는 것이 어려울 수 있습니다. UCS-4 텍스트에는이 문제가 없습니다. UCS-4는 "char"배열의 ASCII 텍스트와 매우 유사하므로 기존 텍스트 알고리즘을 쉽게 포팅 할 수 있습니다.

마지막으로 일부 시스템은 UTF-8을 내부 형식으로 사용합니다. UTF-8 텍스트의 중간에 Null 바이트가 존재하지 않기 때문에 기존 ASCII-또는 ISO-8859 기반 시스템과 상호 작용 해야하는 경우 좋습니다. UTF-16 또는 UCS-4에 있습니다.

다른 팁

내가 제안 할게:

  • 코드의 표현을 위해 wchar_t 또는 동등한.
  • 스토리지 표현의 경우 UTF-8.
  • 와이어 표현의 경우 UTF-8.

스토리지 및 와이어 상황에서 UTF-8의 장점은 기계 엔지니어가 요인이 아니라는 것입니다. 다음과 같은 고정 크기 문자 사용의 이점 wchar_t 코드에서는 문자열을 스캔하지 않고도 문자열의 길이를 쉽게 찾을 수 있다는 것입니다.

UTC는 캐릭터 세트가 아닌 보편적 인 시간입니다 (UTC라는 숯불을 찾지 못했습니다).

내부 표현을 위해 사용하고 싶을 수도 있습니다 wchar_t 각 캐릭터와 문자열에 대한 std :: wstring. 각 문자마다 정확히 2 바이트를 사용하므로 찾는 것과 임의의 액세스가 빠릅니다.

스토리지의 경우 대부분의 데이터가 ASCII (IE Code> = 128)가 아닌 경우 직렬화와 거의 동일한 UTF-16을 사용할 수 있습니다. wstring 그리고 wchar_t.

UTF-16은 Little Endian 또는 Big Endian 일 수 있으므로 와이어 운송의 경우 아키텍처 독립적 인 UTF-8로 변환하십시오.

코드 내부의 내부 표현에서 유럽 및 비 유럽 문자 모두에 대해이 작업을 수행하는 것이 좋습니다.

unnnn

u0020에서 u007e 범위의 문자, 약간의 공백 (예 : 줄 끝)을 일반 문자로 작성할 수 있습니다. u0080 이상의 것, 평범한 캐릭터로 작성하면 코드 페이지에서만 컴파일됩니다 (예 : 프랑스에서는 괜찮지 만 러시아에서는 러시아에서 OK, 일본에서는 중단하지만 중국에서는 미국에서 깨지는 등 .).

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