Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: UTF-8 и библиотека NCURSES  (Прочитано 19705 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Rulik
Помогающий

ru
Offline Offline

« : 18-11-2007 20:01 » 

Столкнулся с такой проблемой:

Пишу редактор для консоли, юзаю библиотеку ncurses для ввода/вывода.
Решил обрамить окошки рамками.
Ну и вызвал box(..., ACS_VLINE, ACS_HLINE) и вместо рамок увидел буквы.
Унес прогу на Linux с локалью KOI8-r все отлично и рамки тоже.
На локали UTF-8 ну ни как немогу добиться рамок.

Может кто-то сталкивался с данной проблемой?
Записан
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #1 : 19-11-2007 14:52 » 

может ключик какой при компиляции надо проставить поищи в мануале
вообще что бы у меня mc нармально с utf работал я его собираю с slang и без ncurses
Записан

Странно всё это....
Rulik
Помогающий

ru
Offline Offline

« Ответ #2 : 19-11-2007 17:25 » 

Я использовал хеддеры <ncursesw/ncurses.h>
и при сборке использовал ключь -lnkursesw

Но рамки так и нет.

Поковыряв исходники нашел интересную табличку acs_map[] которая экспортиться из ncurses, там есть таблица псевдографики.
Т.е. места для кодов символов псевдографики, но так и не нашел в нете коды этих символов для UTF-8

Может кто знает?
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #3 : 19-11-2007 21:29 » 

Если сидиш в Gnome. Application->Accessories->Character map

Я выбрал шрифт Courier. В меню View выбрал By Unicode block. Выбири в листбоксе Unicode Block раздел Box Drawing. Выйдет табличка с разными значками для отрисовки таблиц в псевдо графике.

Как пример:
Код:
┌─┐      - 0xE2 0x94 0x8C, 0xE2 0x94 0x80, 0xE2 0x94 0x90
│ │      - 0xE2 0x94 0x82, 0x20,           0xE2 0x94 0x82     
└─┘      - 0xE2 0x94 0x94, 0xE2 0x94 0x80, 0xE2 0x94 0x98   
« Последнее редактирование: 19-11-2007 21:39 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Rulik
Помогающий

ru
Offline Offline

« Ответ #4 : 20-11-2007 14:54 » 

Не канает, пробовал вставить:
Код:
#include "main.h"
#include <ncursesw/cursesw.h>
//*******************************************************************
static const struct{
    int acscode;
    unsigned int character;
} acs_approx [] = {

    { 'q', 0x00e2948c},
    { 'x', 0xB3},
    { 'l', 0xDA},
    { 'k', 0xBF},
    { 'm', 0xC0},
    { 'j', 0xD9},
    { 'a', 0xB0},
    { 'u', 0xB4},
    { 't', 0xC3},
    { 'w', 0xC2},
    { 'v', 0xC1},
    { 'n', 0xC5},
    { 0, 0}
};

void init_term()
{
    for (int i = 0; acs_approx[i].acscode != 0; i++)
        acs_map[acs_approx[i].acscode] = acs_approx[i].character;
}
//*******************************************************************

Ероглифы сменились, но элемента рамки не появилось.  Здесь была моя ладья...
Записан
Rulik
Помогающий

ru
Offline Offline

« Ответ #5 : 23-11-2007 16:08 » new

Как попой чувствовал, что будут проблемы с этим UTF-8 Здесь была моя ладья...
Записан
Rulik
Помогающий

ru
Offline Offline

« Ответ #6 : 13-12-2007 08:30 » 

Кажеться я нашел в чем собака порылась.
Если выводить в консоль напрямую:

Код:
int main(int argc, char* argv[])
{
    setlocale(LC_ALL, "");
    unsigned int wchar[3] = {0x8c94e2, 0x8094e2, 0x9094e2};
    write(STDOUT_FILENO, wchar, sizeof(wchar));
}

то все ОК, рисуеться ┌─┐.

Но если выводить через ncurses выводиться мусор.

 Здесь была моя ладья...

Бум дальше ковырять ncurses...
Записан
Rulik
Помогающий

ru
Offline Offline

« Ответ #7 : 24-12-2007 20:10 » 

Разобрался.
Удалил libncurses5-dev и libncursesw5-dev, затем поставил обратно только libncursesw5-dev и все заработало, стали нормально отображаться рамочки!!!

 Улыбаюсь
Записан
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 26-12-2007 08:34 » 

Разобрался.
Удалил libncurses5-dev и libncursesw5-dev, затем поставил обратно только libncursesw5-dev и все заработало, стали нормально отображаться рамочки!!!

 Улыбаюсь
А может проще было просто указать линкеру ту библиотеку с которой надо было линковать объектники?
Записан
Rulik
Помогающий

ru
Offline Offline

« Ответ #9 : 26-12-2007 23:31 » 

Я линковал с библиотекой ncursesw, но проблема всплыла и при работе через ssh, с помощью putty.
Решилась переопределением переменной окружения TERM=xterm на TERM=linux.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines