Подскажите, пожалуйста, есть ли какой-либо способ получить в Гармине (60CSx) для POI в поле Note/Заметки русский текст вместо вопросительных знаков? Закачиваю через MapSource. google не помог
??? ???. ??? “???” MapSource->Garmin ??? “???”, Garmin->MS - “ÊÐÀÊÎÇßÁÐÀ”
Решил проблему написанием perl’овского постобработчика gpx-файлов, требуемое преобразование
$cmt=decode("utf8", $cmt);
$cmt=encode("cp".1251, $cmt);
$cmt=encode("utf8", $cmt);
, после которого получается файл с кракозябрами, но воспринимаемый Гармином. Если кому надо - стучитесь, выложу.
P.S. До чего-ж полезно знакомиться с новыми языками
А можно алгоритм преобразования, т.е. вида:
cp1251 → utf8 и т.д.
Как для преобразования в utf8 скачанного из гармина gpx-файла (gpsbabel-ом), так и наоборот - для закачки в гармин.
enca (анализатор кодировки) говорит нечто невразумительное:
enca новые_треки.gpx
Universal transformation format 8 bits; UTF-8
Doubly-encoded to UTF-8 from ISO-8859-5
Ессно перекодировать из ISO в utf8 не получается. Пустое поле и всё выходит.
П.С. прошивка прибора как-то слишком круто. Так-то всё работает - только перекодировку добавить в скрипт скачивания треков и точек…
gpsbabel -t -w -i garmin -f usb: -o gpx -c 1251 -F - | iconv -f WINDOWS-1251 -t UTF-8 | sed -e ‘s/CP1251/UTF-8/g’
Но это не спасает от того, что последние буковки в названиях точек срезаются. (У меня так, по крайней мере, на висте hcx)/
Насколько я помню, проблема в том, что gpsbabel неправильно определяет родную кодировку прибора (cp1251), я лечил простым патчем:
--- garmin.c 2007-02-26 02:18:44.000000000 +0300
+++ garmin.c 2007-08-03 20:35:55.000000000 +0400
@@ -41,6 +41,7 @@
static char *snwhiteopt = NULL;
static char *deficon = NULL;
static char *category = NULL;
+static char *encoding = NULL;
#define MILITANT_VALID_WAYPT_CHARS "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
@@ -60,6 +61,8 @@
NULL, ARGTYPE_BOOL, ARG_NOMINMAX},
{ "category", &category, "Category number to use for written waypoints",
NULL, ARGTYPE_INT, "1", "16"},
+ { "encoding", &encoding, "Override auto-detected encoding",
+ NULL, ARGTYPE_STRING, ARG_NOMINMAX},
ARG_TERMINATOR
};
@@ -184,6 +187,17 @@
}
}
+
+ /*
+ * Encoding override
+ */
+ if (encoding) {
+ receiver_charset = encoding;
+ if (global_opts.debug_level > 0)
+ fprintf(stderr, "Encoding overrided to \"%s\"\n",
+ receiver_charset);
+ }
+
/*
* If the user provided a short_length, override the calculated value.
*/
после наложения кодировку надо указывать в параметрах и gpsbabel все нормально переводит в utf-8, по крайней мере в gpx и kml:
gpsbabel -t -w -i garmin,encoding=windows-1251 -f usb: -o gpx -F out.gpx
но maxcom с лора, говорит что можно и без патча обойтись http://dezhin.livejournal.com/15985.html?thread=56433#t56433, но я не пробовал.
Спасибо большое!
Буду пробовать.
Спасибо за патч!
Подкрутил его для версии 1.3.6 gpsbabel. Всё работает теперь!
Славно.
Запостил в gpsbabel:
http://sourceforge.net/tracker/?func=detail&aid=2937857&group_id=58972&atid=489477
Запостил на bugs.gentoo.org:
http://bugs.gentoo.org/show_bug.cgi?id=301898
Всем спасибо за помощь!
Будем надеяться, что патч примут и в следующих версиях бабела перекодировка будет работать “из коробки”.
Прикольно! Надеюсь он мне через портежи вернется!
Еще его кто-то в убунту постил, но там сказали постите в дебиан.
А вот я не поленился и поковырялся в исходниках. В общем, авторы запутались в собственном коде, и ключ -c нормально работает только при старом стиле задания входного и выходного файлов. Вот заливка вейпоинтов, работает из коробки:
gpsbabel -w -i gpx -o garmin -f 20110716-17_plan.gpx -c windows-1251 -F /dev/ttyUSB0