Это сайт — моя персональная записная книжка. Интересна мне, по большей части, история, своя жизнь и немного программирование.

GEDCOM → MyHerigate

Для импорта и экспорта генеалогических деревьев используется известный формат «ГЕДКОМ», но сайт «MyHeritage» почему-то не понимает файлы в кодировках, отличных от UTF-8. Для конвертации я сделал небольшой скрипт на Баше, которым делюсь:

#!/bin/bash

# проверим в какой кодировке приходит файл
function DetectEncoding {
    awk '/^1 CHAR/ {print $3}' "$1" | tr -d '\r'
}

# конвертируем входной файл в UTF-8, добавляем BOM
function ConvertEncoding {
    printf "\xef\xbb\xbf"
    iconv -f `DetectEncoding "$1"` -t utf-8 "$1" |
    sed 's/^1 CHAR.*$/1 CHAR UTF-8/' 
}

ConvertEncoding "$1"

Запускать следует таким образом:

./convert2myheritage somefile.ged > somefile-utf8.ged
5 комментариев
артист 2012

Есть замечательная утилита для линукса enconv, которая обладает дополнительными возможностями. Про неё можно почитать тут http://linux.die.net/man/1/enconv

Zverik 2012

вот что артист написал ^^^

Евгений Степанищев (bolknote.ru) 2012

Комментарий для артист:

Спасибо за совет, но она тут не нужна.

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

A.I. (sitnik.ru) 2012

И очень правильно что не принимает ничего кроме UTF-8. Тут проблема не в сервисе, а в программе, которая генерирует не-UTF-8 файл.

Евгений Степанищев (bolknote.ru) 2012

Комментарий для sitnik.ru:

Очень странно, что не работает ничего, кроме UTF-8. Мне кажется, деньги пользователей, использующих КОИ-8 не отличаются ничем от денег тех, у кого UTF-8.