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/ |