programing

유니코드 지원에 wchar_t가 필요합니까?

padding 2023. 8. 11. 21:35
반응형

유니코드 지원에 wchar_t가 필요합니까?

은 ▁이▁is?wchar_t유니코드 지원에 필요한 유형?그렇지 않다면 이 멀티바이트 유형의 요점은 무엇입니까?당신은 같은 일을 할 수 있는데 왜 wchar_t를 사용합니까?char?

아니요.

엄밀히 말하면, 아닙니다.유니코드는 코드 포인트를 정의하는 표준이며 특정 인코딩이 필요하지 않습니다.

과 함께 할 수 , 모든 이 UTF-8의 .char객체들은 여전히 null-terminated 상태입니다.

은 UTF-8이 UTF-16이라는 입니다.s[i]더 이상 반드시 캐릭터가 아닐 수도 있고, 그것은 단지 하나의 조각일 수도 있지만, 반면에 충분히 넓은 문자로 당신은 추상화를 보존할 수 있습니다.s[i]는 단일 문자이므로 다양한 변환에서 문자열을 고정 길이로 만들지 않습니다.

32비트 정수는 코드 포인트 문제를 해결할 수 있을 정도로 충분히 넓지만 여전히 코너 케이스를 처리하지 않습니다. 예를 들어, 무언가를 뒤집으면 문자 수가 변경될 수 있습니다.

그래서 밝혀진 것은x[i]문제는 char32_t로도 완전히 해결되지 않으며, 다른 인코딩은 파일 형식을 제대로 만들지 못합니다.

그렇다면, 당신의 암시된 요점은 꽤 타당합니다.wchar_t이 오류는 부분적으로는 Windows가 16비트만 만들었기 때문이고 부분적으로는 모든 문제를 해결하지 못했고 바이트 스트림 추상화와 끔찍하게 호환되지 않았기 때문입니다.

이미 언급했듯이 유니코드 지원에는 wchar_t가 절대 필요하지 않습니다.뿐만 아니라, 이 표준은 wchar_t에 대한 고정 크기 보증을 제공하지 않기 때문에(즉, 특정 시스템에서 (wchar_t)의 크기는 항상 1인 반면, (char)의 크기는 항상 1입니다.

UTF-8 인코딩에서 실제 UNICODE 문자는 하나 이상의 옥텟(최대 4개) 시퀀스에 매핑됩니다.UTF-16 인코딩에서 실제 유니코드 문자는 하나 이상의 16비트 단어 시퀀스에 매핑됩니다.UTF-32 인코딩에서 실제 유니코드 문자는 정확히 하나의 32비트 워드에 매핑됩니다.

보시다시피, 표준이 wchar_t가 항상 16비트 너비임을 보장할 정도로 좋다면 wchar_t는 UTF-16 지원을 구현하는 데 어느 정도 유용할 수 있습니다.유감스럽게도 그렇지 않습니다. 따라서 다음에서 고정 너비 정수 유형으로 되돌려야 합니다.<cstdint>(예: std:uint16_t).

<slightly OffTopic Microsoft-specific rant>

더욱 분통을 터뜨리는 것은 Microsoft의 Visual Studio UNICODE 및 MBCS(멀티바이트 문자 집합) 빌드 구성으로 인한 추가적인 혼란입니다.이 두 가지 모두

혼란스러운 그리고 B) 노골적인 거짓말

Visual Studio의 "UNICODE" 구성은 프로그래머에게 실제 유니코드 지원을 제공하지 않으며, 이러한 두 빌드 구성에서 암시하는 차이도 의미가 없기 때문입니다.설명하자면, Microsoft는 char 또는 wchar_t를 직접 사용하는 대신 TCAR을 사용할 것을 권장합니다.MBCS 구성에서 TCAR은 char로 확장되며, 이는 UTF-8 지원을 구현하는 데 잠재적으로 사용할 수 있음을 의미합니다.UNICODE 구성에서는 wchar_t로 확장되며, Visual Studio에서는 16비트 너비이며 잠재적으로 UTF-16 지원을 구현하는 데 사용될 수 있습니다(Windows에서 사용하는 기본 인코딩).그러나 UTF-8과 UTF-16 모두 특정 유니코드 문자가 각각 하나 이상의 char/wchar_t로 인코딩될 가능성을 허용하기 때문에 (단일 바이트 문자 집합과 반대로) 다중 바이트 문자 집합이라는 용어는 거의 의미가 없습니다.

엎친 데 덮친 격으로 유니코드 구성을 사용하는 것만으로는 실제로 유니코드 지원이 1Iota도 제공되지 않습니다.실제로 그것을 얻으려면 ICU(http://site.icu-project.org/ )와 같은 실제 유니코드 라이브러리를 사용해야 합니다.간단히 말해서, wchar_t 유형과 Microsoft의 MBCS 및 UNICODE 구성은 아무 소용이 없고 불필요한 혼란을 야기하며, 만약 그것들 중 어느 것도 발명되지 않았다면 세상은 훨씬 더 나은 곳이 될 것입니다.

</slightly OffTopic Microsoft-specific rant>

당신은 절대로 필요하지 않습니다.wchar_t는 트웨어서지위기해원하다, 로사니합용실제소프유에를 사용합니다.wchar_t를 사용하면 "wide string"이 UTF-16인지 UTF-32인지 알 수 없기 때문에 더욱 어려워집니다. 이는 OS에 따라 다릅니다. 윈도우즈 utf-16 아래의 다른 모든 utf-32.

그러나 utf-8을 사용하면 유니코드 지원 소프트웨어를 쉽게 작성할 수 있습니다(*).

참조: https://stackoverflow.com/questions/1049947/should-utf-16-be-considered-harmful

(*) 참고: Windows에서는 여전히 사용해야 합니다.wchar_tutf-8 로케일을 지원하지 않기 때문에 유니코드를 사용할 수 있는 윈도우 프로그래밍을 위해서는 wchar 기반 API를 사용해야 합니다.

wchar_t유니코드에는 절대 필요하지 않습니다.예를 들어 UTF-8은 ASCII와의 역호환성을 유지하며 일반 8비트를 사용합니다.char.wchar_t대부분 소위 멀티바이트 문자 또는 기본적으로 더 많은 문자를 사용하여 인코딩되는 모든 문자 집합에 대한 지원을 제공합니다.sizeof(char).

wchar_t는 필요하지 않습니다.특정 인코딩을 갖는 것도 보장되지 않습니다.기본 문자를 나타내는 char와 유사하게 시스템에 기본적으로 사용되는 광범위한 문자를 나타내는 데이터 유형을 제공하는 것이 중요합니다.예를 들어 Windows에서는 wchar_t를 사용하여 와이드 문자 Win32 API 함수에 액세스할 수 있습니다.

wchar_t는 종종 모든 유니코드 문자를 저장하기에 충분하지 않은 16비트이며 UTF_8의 r 데이터를 잘못 선택한 경우가 있습니다.

왜냐하면 당신은 같은 일을 수 없기 때문입니다.char:

절대 최소 모든 소프트웨어 개발자는 유니코드와 문자 집합에 대해 절대적으로, 확실히 알아야 합니다(변명 금지!

char는 일반적으로 단일 바이트입니다. (sizeof(char)1)과 같아야 합니다.

wchar_t다중 바이트 문자를 가정하기 위해 언어에 추가되었습니다.

언급URL : https://stackoverflow.com/questions/2259544/is-wchar-t-needed-for-unicode-support

반응형