Clase wxMBConv
Esta clase es la clase base de una jerarquía de clases capaces de convertir cadenas de texto entre codificaciones multibyte (SBCS o DBCS) y Unicode.
Jerarquía:

Se trata de una clase base abstracta que define las operaciones implementadas por todas las diferentes clases de conversión. Las clases derivadas no añaden nuevas operaciones propias (excepto, posiblemente, algunos constructores no predeterminados), por lo que simplemente se deben utilizar los métodos ToWChar() y FromWChar() (o cMB2WC() y cWC2MB()) de esta clase con los objetos de la clase derivada.
En la documentación de esta clase y otras relacionadas, se puede observar que la longitud de la cadena se refiere al número de caracteres de la cadena sin contar el NUL de terminación, si existe. Mientras que el tamaño de la cadena es el número total de bytes de la cadena, incluyendo cualquier NUL final. Así, la longitud de la cadena de caracteres anchos L «foo» es 3 mientras que su tamaño puede ser 8 o 16 dependiendo de si wchar_t es de 2 bytes (como en Windows) o de 4 (Unix).
Funciones miembro
wxMBConv()
wxMBConv::wxMBConv()
Constructor trivial por defecto.
Clone()
virtual wxMBConv* wxMBConv::Clone() const
Esta función virtual pura se sobrescribe en cada una de las clases derivadas para devolver una nueva copia del objeto al que se llama.
Se utiliza para copiar los objetos de conversión conservando su tipo dinámico.
cMB2WC()
wxWCharBuffer wxMBConv::cMB2WC( const char * in, size_t inLen, size_t * outLen ) const
Convierte de codificación multibyte a Unicode llamando a ToWChar() y asignando un wxWCharBuffer temporal para contener el resultado.
Esta función envuelve convenientemente a ToWChar(), ya que ella misma se encarga de asignar el búfer del tamaño necesario. Sus parámetros tienen el mismo significado que para ToWChar(), en particular inLen puede especificarse explícitamente en cuyo caso se convierten exactamente esos caracteres y outLen recibe (si no es nulo) exactamente el número correspondiente de caracteres anchos, tanto si el último de ellos es NUL como si no. Sin embargo si inLen es wxNO_LEN, entonces outLen no cuenta el NUL final aunque siempre esté presente en este caso.
Por último, hay que tener en cuenta que si la conversión falla, el buffer devuelto no es válido y outLen se pone a 0 (y no a wxCONV_FAILED por cuestiones de compatibilidad).
cMB2WC()
wxWCharBuffer wxMBConv::cMB2WC(const wxCharBuffer & buf) const
Convierte un búfer char en uno char ancho.
Esta es la función de conversión más conveniente y segura, ya que no tiene que tratar directamente con las longitudes de los búferes. Utilizarla si se sabe que el búfer de entrada no está vacío o si se está seguro de que la conversión va a tener éxito - en caso contrario, utilizar la sobrecarga anterior para poder distinguir entre una entrada vacía y un fallo en la conversión.
Valor de retorno
El búfer que contiene el texto convertido, vacío si la entrada estaba vacía o si la conversión falló.
cMB2WX()
wxWCharBuffer wxMBConv::cMB2WX(const char * psz) const
Convierte de codificación multibyte a wchar_t.
cWC2MB()
wxCharBuffer wxMBConv::cWC2MB( const wchar_t * in, size_t inLen, size_t * outLen ) const
Convierte de Unicode a codificación multibyte llamando a FromWChar() y asignando un wxCharBuffer temporal para contener el resultado.
Esta función es una envoltura conveniente alrededor de FromWChar(), ya que se encarga de asignar el búfer del tamaño necesario.
Sus parámetros tienen el mismo significado que los parámetros correspondientes de FromWChar() por favor ver la descripción de cMB2WC() para más detalles.
cWC2MB()
wxCharBuffer wxMBConv::cWC2MB(const wxWCharBuffer & buf) const
Convierte un búfer char ancho en uno char.
Esta es la función de conversión más conveniente y segura, ya que no tiene que tratar directamente con las longitudes de los búferes. Utilizarla si se sabe que el búfer de entrada no está vacío o si se está seguro de que la conversión va a tener éxito - en caso contrario, utilizar la sobrecarga anterior para poder distinguir entre una entrada vacía y un fallo en la conversión.
Valor de retorno
El búfer que contiene el texto convertido, vacío si la entrada estaba vacía o si la conversión falló.
cWC2WX()
const wchar_t* wxMBConv::cWC2WX(const wchar_t * psz) const
Convierte de Unicode al tipo wxChar actual.
Si wxChar es wchar_t, devuelve el parámetro inalterado. Si wxChar es char, devuelve el resultado en un wxCharBuffer. La macro wxWC2WXbuf se define como el tipo de retorno correcto (sin const).
cWC2WX()
wxCharBuffer. wxMBConv::cWC2WX(const wchar_t * psz) const
Convierte de Unicode al tipo wxChar actual.
Si wxChar es wchar_t, devuelve el parámetro inalterado. Si wxChar es char, devuelve el resultado en un wxCharBuffer. La macro wxWC2WXbuf se define como el tipo de retorno correcto (sin const).
cWX2MB()
const char* wxMBConv::cWX2MB(const wxChar * psz) const
Convierte del tipo wxChar actual a codificación multibyte.
Si wxChar es char, devuelve el parámetro inalterado. Si wxChar es wchar_t, devuelve el resultado en un wxCharBuffer. La macro wxWX2MBbuf se define como el tipo de retorno correcto (sin const).
cWX2MB()
wxCharBuffer wxMBConv::cWX2MB(const wxChar * psz) const
Convierte del tipo wxChar actual a codificación multibyte.
Si wxChar es char, devuelve el parámetro inalterado. Si wxChar es wchar_t, devuelve el resultado en un wxCharBuffer. La macro wxWX2MBbuf se define como el tipo de retorno correcto (sin const).
cWX2WC()
const wchar_t* wxMBConv::cWX2WC(const wxChar * psz) const
Convierte del tipo wxChar actual a Unicode.
Si wxChar es wchar_t, devuelve el parámetro inalterado. Si wxChar es char, devuelve el resultado en un wxWCharBuffer. La macro wxWX2WCbuf se define como el tipo de retorno correcto (sin const).
cWX2WC()
wxWCharBuffer wxMBConv::cWX2WC(const wxChar * psz) const
Convierte del tipo wxChar actual a Unicode.
Si wxChar es wchar_t, devuelve el parámetro inalterado. Si wxChar es char, devuelve el resultado en un wxWCharBuffer. La macro wxWX2WCbuf se define como el tipo de retorno correcto (sin const).
FromWChar()
virtual size_t wxMBConv::FromWChar( char * dst, size_t dstLen, const wchar_t * src, size_t srcLen = wxNO_LEN ) const
Convierte una cadena de caracteres anchos en multibyte.
Esta función tiene la misma semántica que ToWChar(), salvo que convierte una cadena ancha en multibyte. Al igual que con ToWChar(), puede ser más conveniente utilizar cWC2MB() cuando se trabaja con cadenas terminadas en NUL.
Parámetros
- dst
- Puntero al búfer de salida del tamaño de al menos dstLen o nullptr.
- dstLen
- Número máximo de caracteres que se escribirán en el búfer de salida si dst no es nulo, no se utiliza en caso contrario.
- src
- Puntero a la cadena de origen, no debe ser nullptr.
- srcLen
- Número de caracteres de la cadena de origen a convertir o wxNO_LEN (parámetro por defecto) para convertir todo hasta e incluyendo el carácter NUL de terminación.
Valor de retorno
Si dst no es nulo, el número de caracteres realmente escritos en él. Si dst es nullptr, el valor devuelto es al menos igual al número de caracteres que se habrían escrito si fuera no nulo, pero puede ser mayor que él en las plataformas que utilizan UTF-16 como codificación wchar_t (esto permite una optimización útil en la implementación de esta función para UTF-32). En cualquier caso, se devuelve wxCONV_FAILED en caso de error de conversión.
GetMaxCharLen()
virtual size_t wxMBConv::GetMaxCharLen() const
Esta función debe ser sobrescrita en las clases derivadas para devolver la longitud máxima, en bytes, de una única representación de caracteres Unicode en esta codificación.
Como consecuencia, el objeto de conversión debe ser capaz de decodificar cualquier secuencia válida de bytes en la codificación correspondiente si tiene al menos esa longitud en bytes, pero puede fallar si es más corta. Por ejemplo, para UTF-8 la longitud máxima de caracteres es 4, ya que 3 bytes o menos pueden ser insuficientes para representar un carácter Unicode en UTF-8, pero 4 son siempre suficientes.
Por razones de compatibilidad, este método no es virtual puro y devuelve 1 por defecto en la clase base, sin embargo debería ser siempre sobreescrito en las clases derivadas.
GetMaxMBNulLen()
static size_t wxMBConv::GetMaxMBNulLen()
Devuelve el valor máximo que puede ser devuelto por GetMBNulLen() para cualquier objeto de conversión.
Actualmente este valor es 4.
Este método se puede utilizar para asignar el búfer con espacio suficiente para los caracteres NUL finales para cualquier codificación.
GetMBNulLen()
virtual size_t wxMBConv::GetMBNulLen() const
Esta función devuelve 1 para la mayoría de las codificaciones multibyte en las que la cadena termina con un único NUL, 2 para UTF-16 y 4 para UTF-32 para las que la cadena termina con 2 y 4 caracteres NUL respectivamente.
Los otros casos no están soportados actualmente y se devuelve wxCONV_FAILED (definido como -1) para ellos.
IsUTF8()
virtual bool wxMBConv::IsUTF8() const
Devuelve true si el conjunto de caracteres del conversor es UTF-8.
Esto se proporciona para optimizar la creación de wxStrings a partir de las cadenas char* devueltas por este convertidor, ya que se pueden utilizar directamente con wxString::FromUTF8() o incluso con wxString::FromUTF8Unchecked() cuando este método devuelve true.
Esta función está disponible universalmente desde wxWidgets 3.1.1 (antes sólo estaba disponible en algunas de las configuraciones de compilación).
MB2WC()
virtual size_t wxMBConv::MB2WC( wchar_t * out, const char * in, size_t outLen ) const
Obsoleta: Esta función está obsoleta, por favor usar ToWChar() en su lugar.
Convierte de una cadena en codificación multibyte a Unicode poniendo hasta caracteres outLen en el buffer out.
Si out es nullptr, sólo se calcula y devuelve la longitud de la cadena que resultaría de la conversión. Hay que tener en cuenta que se trata de la longitud y no del tamaño, es decir, el valor devuelto no incluye el NUL final. Pero cuando se llama a la función con un búfer de salida no nulo, el parámetro outLen debe ser uno más para permitir terminar correctamente la cadena con NUL.
Así que para utilizar correctamente esta función es necesario escribir:
size_t lenConv = conv.MB2WC(nullptr, in, 0); if ( lenConv == wxCONV_FAILED ) ... handle error ... // allocate 1 more character for the trailing NUL and also pass // the size of the buffer to the function now wchar_t *out = new wchar_t[lenConv + 1]; if ( conv.MB2WC(out, in, lenConv + 1) == wxCONV_FAILED ) ... handle error ...
Por esta y otras razones, se recomienda encarecidamente utilizar ToWChar() en su lugar.
Parámetros/h6>
- out
- El búfer de salida, puede ser nullptr si el llamante sólo está interesado en la longitud de la cadena resultante.
- in
- La cadena de entrada terminada en NUL, no puede ser nullptr.
- outLen
- La longitud del buffer de salida incluyendo NUL, ignorado si out es nullptr.
Valor de retorno
La longitud de la cadena convertida excluyendo el NUL final.
ToWChar()
virtual size_t wxMBConv::ToWChar( wchar_t * dst, size_t dstLen, const char * src, size_t srcLen = wxNO_LEN ) const
Convierte una cadena multibyte en una de caracteres anchos.
Esta es la función más general para convertir una cadena multibyte a una cadena ancha, cMB2WC() puede ser a menudo más conveniente, sin embargo esta función es la más eficiente ya que permite evitar cualquier copia innecesaria.
El caso principal es cuando dst no es nullptr y srcLen no es wxNO_LEN (que se define como (size_t)-1): entonces la función convierte exactamente srcLen bytes comenzando en src en cadena ancha que envía a dst. Si la longitud de la cadena ancha resultante es mayor que dstLen, se devuelve un error. Hay que tener en cuenta que si los bytes srcLen no incluyen caracteres NUL, la cadena ancha resultante tampoco terminará en NUL.
Si srcLen es wxNO_LEN, la función supone que la cadena está correctamente (es decir, según sea necesario para la codificación manejada por esta conversión) terminada en NUL y convierte toda la cadena, incluyendo cualquier byte NUL final. En este caso, la cadena completa también está terminada en NUL.
Por último, si dst es nullptr, la función devuelve la longitud del búfer necesario.
Ejemplo de uso de esta función:
size_t dstLen = conv.ToWChar(nullptr, 0, src); if ( dstLen == wxCONV_FAILED ) ... handle error ... wchar_t *dst = new wchar_t[dstLen]; if ( conv.ToWChar(dst, dstLen, src) == wxCONV_FAILED ) ... handle error ...
Hay que tener en cuenta que al pasar la longitud explícita de la fuente la salida no será terminada en NUL si pasa strlen(str) como parámetro. Dejar srcLen como wxNO_LEN por defecto o añadir uno al resultado de strlen si se quiere que la salida termine en NUL.
Parámetros
- dst
- Puntero al buffer de salida del tamaño de al menos dstLen o nullptr.
- dstLen
- Número máximo de caracteres que se escribirán en el búfer de salida si dst no es nulo, no se utiliza en caso contrario.
- src
- Punto a la cadena de origen, no debe ser nullptr.
- srcLen
- Número de caracteres de la cadena de origen que se van a convertir o wxNO_LEN (parámetro por defecto) para convertir todo hasta e incluyendo el carácter o caracteres NUL de terminación.
Valor de retorno
El número de caracteres escritos (o que se habrían escrito si no fuera nulo) en dst o wxCONV_FAILED en caso de error.
WC2MB()
virtual size_t wxMBConv::WC2MB( char * buf, const wchar_t * psz, size_t n ) const
Obsoleta: Esta función está obsoleta, por favor usar FromWChar() en su lugar.
Convierte de Unicode a codificación multibyte. La semántica de esta función (incluyendo el significado del valor devuelto) es la misma que para wxMBConv::MB2WC. Observese que cuando se llama a la función con un búfer no nulo, el parámetro n debe ser el tamaño del búfer y por lo tanto debe tener en cuenta el NUL final, que puede tomar dos o cuatro bytes para algunas codificaciones (UTF-16 y UTF-32) y no uno, es decir, GetMBNulLen().