나는 이미이 종류의 질문에 대한 답변을 검색했으며 그 중 많은 내용을 발견했지만 문제의 명백한 사소한 일에 대해서는 여전히 잔인한 의문을 가지고 있습니다.유니 코드 문자 표시
매우 재미있는 주제 인 http://www.joelonsoftware.com/articles/Unicode.html에 대한 유용한 글을 읽었지 만, 유니 코드 데이터 버퍼가있는 경우 개별 글리프를 식별하는 방법에 대해 궁금한 생각이 들었습니다.
내 질문은 :
가가 어떻게 유니 코드 문자열을 구문 분석에 대한 갈 것이라고 는, UTF-8라고?
바이트 순서를 알고 있다고 가정하면 6 바이트로 표시되는 글리프 (glyph)가 시작될 때 어떤 일이 발생합니까?
즉, 저장 방법을 올바르게 해석하면 말입니다.
이것은 OpenGL과 함께 작동하도록 설계 한 텍스트 디스플레이 시스템과 관련이 있습니다. 표시 목록에 글리프 데이터를 저장하고 있는데 문자열의 내용을 글리프 인덱스 시퀀스로 변환 한 다음 표시 목록 인덱스에 매핑해야합니다 (그래픽 메모리에 전체 글리프 집합을 저장하는 것이 항상 실용적인).
모든 문자열을 단락 배열로 나타내려면 표시해야하는 모든 것을 고려하여 상당한 양의 저장소가 필요합니다.
또한 문자 당 2 바이트만으로는 가능한 모든 유니 코드 요소를 나타내는 것으로 충분하지 않은 것으로 보입니다.
답장을 보내 주셔서 감사합니다. 필자가 읽은 바에 따르면, UTF-8로 작업해야하는 것으로 보입니다. 바이트 순서에 상관없이 문자열을 반복 할 수 있고 가변 길이 구조처럼 개별 코드 포인트를 어셈블 할 수 있습니다. 왜 wchar_t와 그것의 조작을 둘러싼 끔찍함이 처음에는 그렇게 훌륭한 아이디어인지 궁금합니다. – defube
'wchar_t'는 어떤 문자라도 저장할 수있을 정도로 커야합니다. 따라서 조작이 쉬워지고 어렵지 않습니다. 'wchar_t * '를 한 번 증가시켜 다음 문자를 얻을 수 있습니다.이 문자는 멀티 바이트 문자열을 가리키는'char *'문자를 가질 때 훨씬 더 어렵습니다. UTF-16 문자열에 대해'wchar_t '를 사용하는 작은 VC++/Windows 버그가 있지만 일반적으로 C++을 비난 할 수는 없습니다. 예를 들어 Linux에서는 UTF-32 일 뿐이며 모든 것이 정상적으로 작동합니다. – MSalters
내가 언급 한 바보 같은 사실은 내가 얼마나 큰지와 바이트 정렬을 추적해야한다는 사실과 예측할 수없는 크기와 저장 공간의 "원자"데이터 유형을 처리 할 수있는 디자인 코드 (" 바이트 "대"문자 "). UTF-8은 반복하기에는 짜증나지만 내 의도는 저장 용으로 사용하는 것이 었습니다. 컴파일러가 무엇이든 wchar_t가 UTF-32 인 경우, 바이트 순서의 자극과 부적절 함에도 불구하고 "휴대용"직렬화 코드를 표시하기가 훨씬 쉽습니다. – defube