LINUX.ORG.RU

S-Lang и unicode


0

1

Перерыл уже кучу примеров и исходников, не получается вывести русские буквы. Локаль ru_RU.UTF-8. Ниже приведен пример выводящий на экран английскую 'W'. Как вывести скажем русскую 'Ф' ? Кто знает помогите плиз. Пробывал и SLsmg_write_char и SLsmg_write_nstring и SLsmg_write_raw...

$ cat test.c
#include <slang.h>
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <sys/ioctl.h>
#include <termios.h>

int main()
{
    SLtt_get_terminfo();
    if (SLang_init_tty(-1, 0, 1) == -1) return 1;
    if (SLsmg_init_smg() == -1) return 1;
    if (SLutf8_enable(1) == 0) return 1;


    SLwchar_Type ch = 'W';
    SLsmg_write_char(ch);


    SLsmg_refresh();
    SLang_getkey();
    SLsmg_reset_smg();
    SLang_reset_tty();
    return 0;
}
$ gcc test.c -o test -lslang
★★★★
    SLutf8_enable(-1);
	SLsmg_utf8_enable (-1);
    SLtt_utf8_enable (-1);
    SLinterp_utf8_enable (-1);    

    SLwchar_Type ch = 'Ф';
    SLsmg_write_char(ch);
    SLsmg_write_string("Ф");

Чар не пишет, а стринг пишет. Прозреваю косяк, глянь исходники write_char

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

Чар не пишет, а стринг пишет.

ну и правильно, одинарные кавычки это для чара от 0 до 255 или от -128 до 127 туды буква Ф в utf-8 не влезет

dimon555 ★★★★★
()
Ответ на: комментарий от dimon555

ну и правильно, одинарные кавычки это для чара от 0 до 255 или от -128 до 127 туды буква Ф в utf-8 не влезет

Я записывал в память и оттуда забирал.

quest ★★★★
() автор топика
Ответ на: комментарий от stevejobs

Чар не пишет, а стринг пишет. Прозреваю косяк, глянь исходники write_char

Те дело в нескольких разных utf8_enable(-1)... спасибо заработало!

quest ★★★★
() автор топика
Ответ на: комментарий от quest

там написано, что -1 само выбирает, в каких местах юзать utf, основываясь на данных от какой-то платформы, а 1 - включает безусловно (и это можно привести к проблемам, где по поводу утф юзаются костыли)

stevejobs ★★★★☆
()
Ответ на: комментарий от quest

так эта, какой из включателей утфа ты убрал? Какая комбинация работает? Приведи кусок кода, который реально работает? У мну так и не заработало, не юзаются мультичары их встроенных констант...

stevejobs ★★★★☆
()
Последнее исправление: stevejobs (всего исправлений: 1)
Ответ на: комментарий от dimon555

и чо делать?

документация по GCC говорит, что оно поддерживает multibyte charaters из коробки, при -Wmultichars вылезает описанная в доке ошибка, но оно не работает :(

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

1 - включает безусловно

это и странно учитывая что у меня юникодная локаль с которой не никаких проблем

quest ★★★★
() автор топика
Ответ на: комментарий от stevejobs
#include <slang.h>
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <sys/ioctl.h>
#include <termios.h>

int main()
{
    SLtt_get_terminfo();
    if (SLang_init_tty(-1, 0, 1) == -1) return 1;
    if (SLsmg_init_smg() == -1) return 1;
    if (SLutf8_enable(-1) == 0) return 1;
    if (SLsmg_utf8_enable(-1) == 0) return 1;
    if (SLtt_utf8_enable(-1) == 0) return 1;
    if (SLinterp_utf8_enable(-1) == 0) return 1;

    uint8_t ch[] = { "د" }; // korean unicode sign

    SLsmg_write_string(ch);
/*
    uint8_t *p = ch;
    while (*p != 0)
    {
        SLsmg_write_char(*p);
        p++;
    }
*/

    SLsmg_refresh();
    SLang_getkey();
    SLsmg_reset_smg();
    SLang_reset_tty();
    return 0;
}
quest ★★★★
() автор топика
Последнее исправление: quest (всего исправлений: 1)
Ответ на: комментарий от stevejobs

документация по GCC говорит, что оно поддерживает multibyte charaters из коробки

думается мне, что это для строк в двойных кавычках

dimon555 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.