2010-04-26 4 views
8

기본적으로 Windows는 UTF8을 지원하는 C++ 로켈을 가지고 있지 않으므로 UTF8을 지원하는 사용자 정의 로켈 객체를 생성하고 싶습니다 (사용자 정의 ctype 패싯을 사용하여 생성).사용자 정의 로케일을 만들 수 있습니까?

나는 내 자신의 CTYPE 구현로 로케일 객체를 생성

C++는 로케일의 건설을 지원하지 않는 경우 (난 단지 기본으로 이미 존재하는 로케일을 사용하여 로케일을 구성 .. 기능을 발견) 어떻게 커스텀 ctype 패싯으로, 왜 그렇습니까?

+1

ctype은 utf-8과 같은 가변 길이 인코딩과 호환되지 않습니다. 예를 들어 tolower()는 단일 CharType을 가져 와서 반환합니다. 따라서 ASCII 서브 세트 외부의 모든 문자는 ctype에 의해 변환 될 수 없습니다. –

+2

http://www.boost.org/doc/libs/1_42_0/libs/serialization/doc/codecvt.html을 참조하십시오. 또한 Stroustrup 부록 D, http://www.research.att.com/~bs/3rd_loc.pdf. 그리고 표준 C++ IOStreams 및 로케일 http://books.google.fr/books?id=nnRog4I-3jwC – anno

+0

@anno : 덕분에이 링크는 나를 도왔습니다. +1 – smerlin

답변

5

std :: locale :: facet에서 상속하여 사용자 정의면을 작성할 수 있습니다. 로케일은 다음 코드와 같이 해당 사용자 정의 패싯을 사용할 수 있습니다.

class custom_facet : public std::locale::facet { 
public: 
    static std::locale::id id; 
    custom_facet(int); 
    int custom_value() const; 
    }; 

std::locale custom_locale (std::locale(), new custom_facet()); 
int s = std::use_facet<custom_facet>(custom_locale).custom_value(); 
+0

이 대답으로 받아 들여졌지만, 내 질문에 부분적으로 대답했지만 annos 링크도 나를 도왔습니다. 그래서이 질문은 저를 위해 해결되었습니다. – smerlin

관련 문제