#c #ubuntu #ascii
#c #ubuntu #ascii
Вопрос:
Мне нужно напечатать символы, являющиеся частью расширенного ASCII, а именно что-то вроде:
char p = 219; // a rectangle
printf("%cn", p);
Однако в командной оболочке он не отображает соответствующий символ .. что я могу сделать, чтобы увидеть прямоугольник?
Спасибо
Ответ №1:
Используйте libiconv для преобразования CP-1252 или ISO-8859-1 или любого другого 8-разрядного набора символов, из которого вы конвертируете, в UTF-8; что-то вроде этого:
#include <iconv.h>
iconv_t cd = iconv_open("utf-8", "cp-1252");
iconv(cd, amp;inbuf, sizeof(inbuf), amp;outbuf, sizeof(outbuf)); // <- psuedocode, change to meet your needs
Комментарии:
1. это может быть cp437, cp850 или другая из множества кодовых страниц DOS. В ISO-8859-1 нет прямоугольника.
2. Если это фиксированный символ, нет смысла использовать
iconv
. Просто найдите номер кодовой точки в Юникоде или UTF-8 для нее и введите жесткий код.3. @ninjalj: Конечно, как угодно. Это ответственность пользователя. @R: Конечно. Но запрашивающий говорит «Мне нужно напечатать символы». Возможно, у них больше символов, чем просто (char) 219.
4. да .. на самом деле я хочу напечатать этот символ несколько раз!
5. Вы можете преобразовать символ один раз, а затем повторно использовать буфер UTF-8, конечно.
Ответ №2:
Вам придется использовать виртуальный терминал, поддерживающий расширенный ASCII. Терминалом по умолчанию в Ubuntu является gnome-terminal. Вам придется изменить кодировку символов в gnome-terminal с UTF-8 на ISO-8859-2 или использовать другой терминал. Например, Консоль.
Комментарии:
1. Консоль работает так же! он не печатает правильный символ ascii
2. В любом случае, современные терминалы Linux будут использовать UTF-8. Вам нужен какой-то другой набор символов.
3. Это правильно. Но это легко настроить Konsole на into, используя ISO-8859-2.
Ответ №3:
Для меня рабочей кодовой страницей является IBM850. Используя консоль, в конфигурации профиля, вкладка Дополнительно, вы можете выбрать кодовую страницу. Я могу отображать расширенный ascii таким образом (полезно для доступа к IPMI bios).