라이브러리 함수가 UTF-8에서 작동한다고 가정하면 (일반적으로 Windows에서는 그렇지 않습니다) 실제로 라이브러리 함수를 사용하는 한 실제 문제는 없습니다. 그러나 문자열 배열의 개별 요소를 수동으로 해석하는 코드를 작성하는 경우 코드 포인트가 UTF-8로 된 단일 바이트 이상임을 고려한 코드를 작성해야합니다. 특히 영어 이외의 문자를 처리 할 때는 (예 : 'ä', 'ö', 'ü'와 같은 독일어/스칸디나비아 문자 포함). 또한 엔트리 당 16 비트가 있더라도 하나의 코드 포인트가 2 개의 16 비트 엔트리를 차지하는 상황을 발견 할 수 있습니다.
이것을 고려하지 않으면 별도의 부품이 처리를 "혼동"시킬 수 있습니다. 코드 포인트의 중간에있는 것을 사물의 중간 인 것과는 다른 의미로 인식합니다.
코드 포인트의 가변 길이는 예를 들어 문자열 길이 및 하위 문자열과 같은 모든 흥미로운 영향을줍니다. 길이는 문자열을 포함하는 배열의 요소 수에 해당합니다. 코드 포인트의 수.
어떤 인코딩이 사용 되든, 예를 들어 아라비아어에서는 개별 문자를 함께 연결해야하는 경우가 있습니다. 이것은 실제로 캐릭터를 그릴 때만 중요하지만 최소한 염두에 두어야 할 가치가 있습니다. (내 글에 대한!)
용어 :
문자는 화면에 표시 할 수있는 문자/기호 등을 =.
코드 포인트 = 문자열의 문자 표현은 문자열 배열의 하나 이상의 요소 일 수 있습니다.
문자열 배열 = 문자열의 저장은, 캐릭터의 고정 된 크기 (예를 들어 8 비트, 16 비트, 32 비트, 64 비트)
문자열 요소 = 하나의 유닛의 요소로 구성 정렬.
관련 MS 와이드 printf/scanf 기능이 표준과 호환되지 않습니다. 또한, 귀하의 질문은 꽤 편견이 있습니다. 어떤 것이 든, 나는 UTF-8에 대한 모든 방법을 제안하고 MS API를 호출 할 때만 변환을 제안합니다. – Deduplicator
참고 : 리눅스에서 모든 일반 문자열 기능은 문제없이 기본적으로 utf-8에서 작동합니다. Windows 프로그램에 관해서 이야기 할 때만 문제가 있습니다. –
@Deduplicator 당신이 문자열을 그냥 통과한다면 나는 당신과 동의 할 것입니다. 그러나 실제 문자열 조작 (특히 전체 코드 포인트 고려)을 수행해야하는 경우 'char32_t'는 항상 단위 당 하나의 코드 포인트가되도록 보장되므로 바람직한 직렬화입니다. 나는 여전히 UTF-8로 출력 할 것입니다. – Mgetz