¿Cómo convertir (no necesariamente mediante programación) entre wchar_t y GCC / Linux de Windows?
Pregunta
Supongamos que tengo esta cadena wchar_t de Windows:
L"\x4f60\x597d"
y
L"\x00e4\x00a0\x597d"
y me gustaría convertirlo (no necesariamente mediante programación; será una cosa única) al formato GCC / Linux wchar_t, que es UTF-32 AFAIK. ¿Cómo lo hago? (una explicación general sería agradable, pero un ejemplo basado en este caso concreto también sería útil)
Por favor, no me dirija a sitios de conversión de caracteres. Me gustaría convertir de L " \ x (algo) " forma y no "carácter final" formulario.
Solución
Una de las bibliotecas más utilizadas para realizar la conversión de caracteres es la biblioteca de la UCI http://icu-project.org/ es por ejemplo utilizado por algunas http://www.boost.org/ bibliotecas.
Otros consejos
Se convertiría de UTF-16 (el formulario Visual C ++ wchar_t
) a UTF-8, luego posiblemente de UTF-8 a UCS-4 (el formulario GCC wchar_t
), ser una respuesta aceptable?
Si es así, entonces en Windows podría usar la función WideCharToMultiByte
(con CP_UTF8
para el parámetro CodePage
), para la primera parte de la conversión. Luego, puede pegar las cadenas UTF-8 resultantes directamente en su programa o convertirlas aún más. Aquí es un mensaje que muestra cómo una persona lo hizo; también puede escribir su propio código o hacerlo manualmente (la especificación oficial, con una sección sobre cómo convertir exactamente UTF-8 a UCS-4, se puede encontrar aquí ). Puede haber una forma más fácil, todavía no estoy demasiado familiarizado con las cosas de conversión en Linux.
Solo debe preocuparse por los caracteres entre \ xD800 y \ xDFFF inclusive . Todos los demás caracteres deben asignarse exactamente de la misma manera desde UTF-16 a UCS-4 cuando se llenan con cero.
Ignacio tiene razón, si no usa algunos caracteres chinos raros (o algunos scripts extintos), entonces el mapeo es uno a uno. (la "jerga oficial" es "si no tiene caracteres fuera de BMP")
Este es el algoritmo, por si acaso: http://unicode.org/faq/utf_bom.html#utf16-3 Pero nuevamente, lo más probable es que sea inútil para su caso real.
También puede usar las fuentes gratuitas de Unicode ( ftp://ftp.unicode.org / Public / PROGRAMS / CVTUTF )