Me di cuenta de que SyncTERM usa una codificación de caracteres diferente a la del emulador de terminal predeterminado de MacOS, y son incompatibles entre sí. Por ejemplo, suponga que desea imprimir un carácter de bloque en una cadena de formato. En SyncTERM, que usa la codificación de caracteres IBM Extended ASCII, usaría una secuencia de escape octal como 261
. En Terminal.app (y probablemente también en iTerm2), esto solo imprime un signo de interrogación. Dado que estos terminales usan UTF-8, debe usar el uxxxx
secuencia de escape.
Entonces, digamos que desea imprimir un cierto carácter, no ASCII, en una cadena de formato, y desea que funcione en todos los emuladores de terminal, independientemente del conjunto de caracteres. Supongo que usaría una entrada en la base de datos terminfo, pero no estoy muy familiarizado con terminfo. Necesito algunos consejos aquí.
Respuesta aceptada:
Corto:
- terminfo no lo llevará allí, no lo ayudará
- no existe una forma fiable de determinar qué codificación utiliza realmente un terminal
- comenzar desde literales Unicode es el camino a seguir, siempre que sepa qué codificación quiere usar en la terminal
- el usuario debe saber qué configuración regional es apropiada y qué codificación puede hacer el terminal
- el estándar C tiene funciones para convertir caracteres "anchos" que tendrá disponibles en cualquier plataforma similar a Unix (ver por ejemplo
setlocale
,wcrtomb
ywcsrtombs
)