문제

Multibyte라는 용어는 문자가 1 바이트 (예 : UTF -8)보다 넓을 수는 없지만 1 바이트보다 넓은 문자 세트 (예 : UTF -16)? 다시 말해 : 누군가가 멀티 바이트 캐릭터 세트에 대해 이야기한다면 무엇을 의미합니까?

도움이 되었습니까?

해결책

이 용어는 모호하지만 국제화 작업에서 일반적으로 유니 코드 기반 인코딩을 참조하는 "멀티 바이트 문자 세트"라는 용어를 피했습니다. 일반적으로, 우리는 각 문자를 정의하기 위해 하나 이상의 바이트가있는 레거시 인코딩 체계에 대해서만이 용어를 사용했습니다 (문자 당 하나의 바이트만을 필요로하는 인코딩 제외).

중국 인코딩과 함께 Shift-JIS, JIS, EUC-JP, EUC-KR이 일반적으로 포함됩니다.

일부 예외를 제외하고 대부분의 레거시 인코딩에는 일종의 상태 머신 모델 (또는 더 간단하게 페이지 교환 모델)이 필요하며 텍스트 스트림에서 뒤로 이동하는 것은 복잡하고 오류가 발생하기 쉽습니다. UTF-8과 UTF-16은 비트 마스크로 테스트 될 수 있고 UTF-16은 다양한 대리 쌍에 대해 테스트 될 수 있으므로 비발적 문서에서 뒤로 이동할 수 있으므로 UTF-8을 테스트 할 수 있으므로이 문제를 겪지 않습니다. 큰 복잡성없이 안전하게 수행하십시오.

태국어와 베트남과 같은 언어의 몇 가지 유산 인코딩은 멀티 바이트 캐릭터 세트의 복잡성을 가지고 있지만 실제로는 캐릭터를 결합하는 데 기반을두고 있으며 일반적으로 광범위한 용어 "Multibyte"와 함께 뭉쳐지지 않습니다.

다른 팁

누군가가 멀티 바이트 캐릭터 세트에 대해 이야기한다면 무엇을 의미합니까?

평소와 같이, 누가 대화를하고 있는지에 달려 있습니다!

논리적으로 UTF-8, Shift-JIS, GB 등 : 가변 길이 인코딩이 포함되어야합니다. UTF-16은 종종이 그룹에서 고려되지 않을 것입니다 (비록 그것이 일종의 대리자와는 달리, UTF-16LE/UTF-16BE를 통해 바이트로 인코딩 할 때 여러 바이트입니다).

그러나 Microsoftland 에서이 용어는보다 일반적으로 가변 길이 기본 시스템 코딩을 의미하는 데 사용됩니다 (유산이 아닌 비 유니 코드 응용 프로그램의 경우 슬프게도 여전히 많이 있습니다). 이 사용에서는 Windows의 시스템 코드 페지가 이러한 인코딩 중 하나로 설정할 수 없기 때문에 UTF-8 및 UTF-16LE/UTF-16BE를 포함 할 수 없습니다.

실제로, 어떤 경우에는 "MBCS"는 시스템 코드에 대한 동의어에 지나지 않으며, 그렇지 않으면 "ANSI"로 알려진 (더 오해의 소지가 있음). 이 경우 "Multibyte"문자 세트는 실제로 CP1252 서유럽만큼 사소한 일이 될 수 있으며, 캐릭터 당 하나의 바이트 만 사용합니다!

나의 조언 : 당신이 의미 할 때“가변 길이”를 사용하고 모호한 용어“multibyte”를 피하십시오. 다른 사람이 그것을 사용하면 설명을 요청해야하지만 일반적으로 Windows 배경을 가진 사람은 UTF가 아닌 CP932 (Shift-JIS)와 같은 유산 동아시아 코드에 대해 이야기 할 것입니다.

1 바이트 = 1 문자 매핑이없는 모든 문자 세트. 모든 유니 코드 변형뿐만 아니라 아시아 문자 세트는 멀티 바이트입니다.

자세한 내용은 읽는 것이 좋습니다 이 위키 백과 기사.

멀티 바이트 캐릭터는 인코딩에 1 바이트가 필요한 캐릭터를 의미합니다. 그러나 해당 인코딩을 사용하는 모든 문자가 (바이트 측면에서) 동일한 너비를 갖는다는 것을 의미하지는 않습니다. 예 : UTF-8 및 UTF-16 인코딩 된 문자는 때때로 여러 바이트를 사용할 수 있지만 모두 UTF-32 인코딩 된 문자 언제나 32 비트를 사용하십시오.

참조 :

일반적으로 전자, 즉 UTF-8과 유사합니다. 자세한 내용은 참조하십시오 가변 폭 인코딩.

전자 - "가변 길이 인코딩"이라는 용어가 더 적절할 것입니다.

나는 일반적으로 그것을 사용하여 ~할 수 있다 캐릭터 당 하나 이상의 바이트가 있습니다.

멀티 바이트 문자 세트는 1 바이트 및 2 바이트 문자로 구성 될 수 있습니다. 따라서 멀티 바이트 문자열은 단일 바이트 및 이중 바이트 문자의 혼합물을 포함 할 수 있습니다.

ref : 단일 바이트 및 멀티 바이트 문자 세트

UTF-8은 멀티 바이트이며, 이는 각 영어 문자 (ASCII)가 1 바이트에 저장되는 반면, 중국어와 같은 영어 이외의 캐릭터는 3 바이트로 저장됩니다. 중국어/태국을 "ท t"와 같은 영어와 혼합하면 첫 번째 태국 캐릭터 "ท"는 3 바이트를 사용하는 반면 두 번째 영어 문자 "T"는 1 바이트 만 사용합니다. 멀티 바이트 인코딩을 설계 한 사람들은 영어 문자가 3 바이트로 저장되어서는 안되며 저장 공간의 낭비로 인해 1 바이트에 적합 할 수 있음을 깨달았습니다.

UTF-16은 각 캐릭터를 영어 또는 비 영어를 고정 2 바이트 길이로 저장하므로 멀티 바이트가 아니라 넓은 문자라고합니다. 각 캐릭터가 2 바이트로 완전히 적합하지만 UTF-8 콘솔 출력으로 인쇄하는 것은 함수 wcstombs ()를 사용하여 넓은 문자에서 멀티 바이트 형식으로 변환 해야하는 중국어/태국어에 매우 적합합니다.

UTF-32는 각 문자를 고정 된 4 바이트 길이로 저장하지만 저장 공간 낭비로 인해 문자를 저장하는 데 아무도 사용하지 않습니다.

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