2011-10-23 3 views
12

여기와 다른 곳 (아래 참조) 다른 게시물의 수를 검토 한 결과,하지만 난 아직이 질문에 대한 명확한 답이없는 : 어떻게 기본 다국어 평면 외부 유니 코드 문자를 처리 wchar_t를 창?Windows wchar_t는 기본 다국어 평면 외부에서 유니 코드 문자를 어떻게 처리합니까?

그래서 Windows에서 한 (U + 2008A) 한자를 코딩하려고 할 때 Windows가 어떻게합니까?

+1

Windows는 인코딩으로 UCS2를 사용합니다. –

+1

그게 내가 생각한거야. 그러나 (U + 1D565) MATHEMATICAL DOUBLE-STRUCK SMALL T를 포함하도록 Windows 컴퓨터에서 파일 이름을 성공적으로 편집했습니다 (http://programmers.stackexchange.com/questions/102205/should-utf-16-be 참조). - 간주 - 유해). 따라서 Windows가 UCS-2를 사용하더라도 SMP 문자를 파일 이름에 넣을 수 있습니다. 그러면 어떻게됩니까? – vy32

+1

[Wikipedia] (http://en.wikipedia.org/wiki/NTFS#Internals)에 따르면 "NTFS는 이름 인코딩 (파일 이름, 스트림 이름, 인덱스 이름 등)에 대한 16 비트 값 시퀀스를 허용합니다. 이는 UTF-16 코드 포인트가 지원되지만 파일 시스템은 시퀀스가 ​​유효한 UTF-16인지 (유니 코드 표준에 제한되지 않은 모든 짧은 값의 시퀀스를 허용하는지) 여부를 확인하지 않음을 의미합니다. " –

답변

16

Windows stdlib에서의 구현은 UTF-16을 사용하지 않습니다. 약 16 비트 코드 단위 만 인식합니다.

그래서 당신은 문자열에서 UTF-16 대용 순서를 넣을 수 있습니다, 당신은 더 높은 수준의 처리를 사용하여 하나의 문자로 그 치료를 할 수 있습니다. 문자열 구현은 당신을 도울뿐만 아니라 방해하지도 않습니다. UTF-16으로 해석 될 때 유효하지 않은 코드 단위조차도 문자열에 코드 단위의 모든 시퀀스를 포함시킬 수 있습니다.

Windows의 상위 수준 기능 중 많은 부분이 UTF-16 서로 게이트로 만들어진 문자를 지원하기 때문에 파일 .txt을 호출하여 올바르게 렌더링하고 올바르게 편집 할 수 있습니다 (하나의 키 누르기 만 사용 , 복잡한 텍스트 레이아웃 (일반적으로 Windows의 Uniscribe 라이브러리 사용)을 지원하는 Explorer와 같은 프로그램에서 문자를지나 이동합니다.

하지만 여전히 거기 당신은 당신이 경우-무감각 그렇지 않으면 그것을 허용 할 .txt, 같은 폴더에 .txt라는 파일을 만들 수있는 사실과 같이 UTF-16 망각을 통해 빛나는 볼 수있는 장소, 또는 프로그래밍 방식으로 [U+DC01][U+D801].txt을 만들 수 있습니다.

이의 pedants Windows가 UTF-16 문자열이나 단지 UCS-2 "지원"여부에 대해 좋은 긴 기본적으로 의미 인수를 가질 수있는 방법입니다.

+2

+1 "지원". 먼저 명명법을 정의한 다음 논쟁하십시오. :) –

+0

그'.txt'-s는 크롬에서 나에게 모두 동일합니다 ("?"). 의도하지 않았습니까? ;) – mlvljr

7

윈도우는 윈도우 API를 현재 생산하고 UTF-16을 소비 wchar_t를 UCS-2를 사용하는 데 사용하지만, 윈도우 2000 UTF-16을 채택했다.

는 모든 타사 프로그램은 BMP 외부 데이터와이 정확하고 그렇게 될 수있다 버그를 처리합니다. 또한

가 가변 길이 부호화되고, 그 UTF-16을 참고 wchar_t를 사용하여 부호화를위한 C 또는 C++ 요구 사항에 부합하지 않는다. 이로 인해 wctomb와 같은 단일 wchar_t를 사용하는 표준 함수와 Windows에서 BMP 이외의 문자를 처리 할 수없는 함수, 단일 문자를 처리 할 수 ​​있도록보다 넓은 형식을 사용하는 몇 가지 추가 함수를 정의하는 Windows와 같은 일부 문제가 발생합니다 BMP 외부. 함수가 무엇인지는 잊었지만 wchar_t 대신 int를 반환하는 Windows 함수를 사용했습니다 (EOF가 가능한 결과가 아닌 함수).