¿Cómo convertir (no necesariamente mediante programación) entre wchar_t y GCC / Linux de Windows?

StackOverflow https://stackoverflow.com/questions/236125

  •  04-07-2019
  •  | 
  •  

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.

¿Fue útil?

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 )

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top