OberonCore
https://forum.oberoncore.ru/

Lin Console: средство преобразования UCS-2 <-> UTF-8
https://forum.oberoncore.ru/viewtopic.php?f=133&t=4130
Страница 3 из 3

Автор:  Alexander Shiryaev [ Четверг, 01 Ноябрь, 2012 20:20 ]
Заголовок сообщения:  Re: Lin Console: средство преобразования UCS-2 <-> UTF-8

Верно. Но дело ещё в том, что кодировка iconv, которую надо указывать, чтобы порядок следования байтов был такой же, как на данной машине, зависит от реализации iconv. Для Linux (glibc iconv) это "UCS-2", для OpenBSD (libiconv) это "UCS-2-INTERNAL". А "UCS-2LE" и "UCS-2BE" более однозначны.

А в том, что "IMPORT Kernel", ничего плохого нет -- это же Host.

Автор:  Илья Ермаков [ Пятница, 02 Ноябрь, 2012 00:51 ]
Заголовок сообщения:  Re: Lin Console: средство преобразования UCS-2 <-> UTF-8

Может быть, ты открыл в памяти текстовик с обратным порядком байт - не как массив CHAR, а более низкоуровнево, как массив BYTE, допустим, и обратился к iconv... Так что, что энтот iconv просит уточнить порядок - это логично.

Автор:  Роман М. [ Вторник, 16 Сентябрь, 2014 01:45 ]
Заголовок сообщения:  Re: Lin Console: средство преобразования UCS-2 <-> UTF-8

Alexander Shiryaev писал(а):
Реализовал преобразование кодировки имён файлов и каталогов и переменных окружения в HostFiles через iconv:
Код:
MODULE LinIconv ["libc.so.6"]; (* Linux *)

   IMPORT Libc := LinLibc;

   CONST
      NULL* = Libc.NULL;

   TYPE
      PtrVoid = Libc.PtrVoid;
      PtrSTR* = Libc.PtrSTR;
      PtrLSTR* = POINTER TO ARRAY [untagged] OF CHAR;
      size_t* = Libc.size_t;

      iconv_t* = PtrVoid;

   PROCEDURE [ccall] iconv_open* (tocode, fromcode: PtrSTR): iconv_t;
   PROCEDURE [ccall] iconv_close* (cd: iconv_t): INTEGER;

   PROCEDURE [ccall] iconv* (cd: iconv_t; VAR [nil] inbuf: PtrSTR; VAR inbytesleft: size_t; VAR [nil] outbuf: PtrSTR; VAR outbytesleft: size_t): size_t;

   PROCEDURE [ccall] iconv_encode* ["iconv"] (cd: iconv_t; VAR [nil] inbuf: PtrLSTR; VAR inbytesleft: size_t; VAR [nil] outbuf: PtrSTR; VAR outbytesleft: size_t): size_t;

   PROCEDURE [ccall] iconv_decode* ["iconv"] (cd: iconv_t; VAR [nil] inbuf: PtrSTR; VAR inbytesleft: size_t; VAR [nil] outbuf: PtrLSTR; VAR outbytesleft: size_t): size_t;

END LinIconv.
...
...

Полностью HostFiles для Linux.

Проверял в Ubuntu и в Fedora Core с кодировкой UTF-8 ("UTF8" тоже работает), в OpenBSD -- с KOI8-R.

Хочу поинтересоваться из каких заголовков были получены определения функций iconv_encode и iconv_decode? Я нигде не смог найти их определение.

Поиск по Гуглю по "iconv_encode" выдаёт лишь ссылки с упоминанием инициативы перевода BlackBox на Линукс.
https://www.google.ru/search?q=%22iconv_encode%22&hl=ru

Автор:  Alexander Shiryaev [ Вторник, 16 Сентябрь, 2014 09:52 ]
Заголовок сообщения:  Re: Lin Console: средство преобразования UCS-2 <-> UTF-8

Ни из каких. Эти функции нужны только для удобной работы с типом данных PtrLSTR. См. те места, где они вызываются.

Автор:  Роман М. [ Вторник, 16 Сентябрь, 2014 11:32 ]
Заголовок сообщения:  Re: Lin Console: средство преобразования UCS-2 <-> UTF-8

Прошу прощения, не обратил внимание на то что по факту функции iconv_encode, iconv_decode используются в качестве alias из-за флага ["iconv"].

Спасибо за пояснение.

И с таким выравниванием чуточку понятнее в чём суть этих функций:
Код:
   PROCEDURE [ccall] iconv*                  (cd: iconv_t; VAR [nil] inbuf: PtrSTR;  VAR inbytesleft: size_t; VAR [nil] outbuf: PtrSTR;  VAR outbytesleft: size_t): size_t;
   PROCEDURE [ccall] iconv_encode* ["iconv"] (cd: iconv_t; VAR [nil] inbuf: PtrLSTR; VAR inbytesleft: size_t; VAR [nil] outbuf: PtrSTR;  VAR outbytesleft: size_t): size_t;
   PROCEDURE [ccall] iconv_decode* ["iconv"] (cd: iconv_t; VAR [nil] inbuf: PtrSTR;  VAR inbytesleft: size_t; VAR [nil] outbuf: PtrLSTR; VAR outbytesleft: size_t): size_t;

Автор:  Alexander Shiryaev [ Вторник, 04 Ноябрь, 2014 00:45 ]
Заголовок сообщения:  Re: Lin Console: средство преобразования UCS-2 <-> UTF-8

Alexander Shiryaev писал(а):
Ошибки исправил...

Исправлена ещё одна ошибка.

Страница 3 из 3 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/