LINUX.ORG.RU
ФорумTalks

[жж][opensource][кириллица][НЕНАВЕСТ] Чтение юникода

 , ,


0

0

Часто встречаю случаи, что приложение работает отлично, вот только с кириллицей не дружит. А других аналогов под линаксом нет. И если кривой перловый модуль для чтения excel-файлов еще можно простить, то mdbtools простить не могу:

/* convert unicode to ascii, rather sloppily */
for (i=0;i<len;i+=2)
   text[i/2] = mdb->pg_buf[row_start + i];
text[len/2]='\0';

И вот такое много где найти можно. НЕНАВЕСТ!!!!111

Ответ на: комментарий от abraziv_whiskey

Не, венду они пишут голодные, за еду, а линукс сытые, не зряж пингвин такой жирный и довольный.

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

Не, эти совсем другие. Авторы оригинального Аксеса бы наверняка знали, что внутри 1 такой подстроки могут встречаться нуллы (подозреваю, что только в случае кириллицы), из-за которых постоянно сбивается очередность байт, а значит за 1 цикл в любом случае не перевести. Тут другие.

EmStudio
() автор топика

> И если кривой перловый модуль для чтения excel-файлов еще можно простить, то mdbtools простить не могу

"Пакет MDB Tools служит для доступа к базам данных в формате Microsoft Access (*.mdb) под различными программными платформами". -- Оно? Почему тогда не можете простить? Какая разница между кривым модулем для чтения одного мелкомягкого формата (XLS) и кривым модулем для чтения другого мелкомягкого формата (MDB)? И последний вопрос -- что мешает поправить и отослать патч? Фикс тут довольно простой. А авторы модуля наверняка америкосы -- им интернациональных проблем просто не понять, и это вполне естественно.

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

Скорее эта функция переводит из "мелкомягкого юникода" в UTF-8. "Мелкомягкий юникод" -- это фактически то, что в стандарте называется Basic Multilingual Plane -- обрезанный до 65536 символов (2 байта) юникод. Соответственно, для ASCII эта функция работает правильно, а всё что выше -- будет срезано. Отсюда и проблема с кириллицей.

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

> Какая разница между кривым модулем для чтения одного мелкомягкого формата (XLS) и кривым модулем для чтения другого мелкомягкого формата (MDB)?

Ну как-то у меня предубеждение, что в скриптовые языки ниже порог вхождения, а значит и качество кода может быть немного ниже.

> И последний вопрос -- что мешает поправить и отослать патч? Фикс тут довольно простой

Дык не умею. Если хочешь - укажу, где такая бяка встречается, сам и отправишь. Для себя я решил проблему жутким хаком, показывать такое стыдно.

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

У них обычно используется UCS2 (брезанный до 65536 символов (2 байта) юникод), причем в данном случае байты перевернуты. iconv пережовывает. Вот только внутри этого UCS2 переодически появляются нулевые байты, которые нарушают очередность байт. Встречаются они на границах слов, в местах "разрыва" еще и цифры пропадают. Пока декодировать не смог, iconv тоже спотыкается.

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

> Если хочешь - укажу, где такая бяка встречается, сам и отправишь.

Нет уж, спасибо за предложение.

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