2010-04-26 23 views
8

Dado que Windows no tiene una configuración regional C++ con compatibilidad UTF8 de forma predeterminada, me gustaría construir un objeto de configuración regional personalizada que admita UTF8 (creándolo con una faceta ctype personalizada).¿Es posible crear su configuración regional personalizada?

¿Cómo puedo construir un objeto local con una mi propia aplicación ctype (i encuentra sólo funciones para la construcción de un local se usa una región ya existente como base de ..)

Si C++ no soporta la construcción de locales con una faceta ctype personalizada, ¿por qué es así?

+1

ctype no es compatible con codificaciones de longitud variable como utf-8. Por ejemplo, tolower() toma y devuelve un solo CharType. Cualquier carácter fuera del subconjunto ASCII será intraducible por ctype. –

+2

Ver http://www.boost.org/doc/libs/1_42_0/libs/serialization/doc/codecvt.html. También Stroustrup Apéndice D, http://www.research.att.com/~bs/3rd_loc.pdf. Y estándar C++ IOStreams y locales http://books.google.fr/books?id=nnRog4I-3jwC – anno

+0

@anno: gracias estos enlaces me ayudaron mucho, +1 – smerlin

Respuesta

5

Es posible crear facetas personalizadas heredando de std :: locale :: facet. Los locales pueden usar esas facetas personalizadas como en el siguiente código:

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

aceptado como respuesta, aunque esto respondió mi pregunta solo parcialmente, pero los enlaces annos también me ayudaron, por lo que esta pregunta está resuelta para mí. – smerlin

Cuestiones relacionadas