Пакетное перекодирование текстовых/xml файлов

Тема в разделе "Софт", создана пользователем Olexiy_in_UKR, 9 мар 2008.

Статус темы:
Закрыта.
  1. Olexiy_in_UKR

    Olexiy_in_UKR

    Регистр.:
    2 дек 2007
    Сообщения:
    197
    Симпатии:
    756
    Народ, подскажите, кто знает плизззз!
    Задача следующая - есть туча xml файлов в кодировке 1251, а все их нужно сконвертировать в кодировку UTF-8.
    Тело файлов содержит как английские так и русские символы.

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

    Заранее спасибо)

    ЗЫ в самом теле xml файла уже прописано
    <?xml version="1.0" encoding="UTF-8"?>
    но реально кодировка 1251.
     
  2. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
  3. Olexiy_in_UKR

    Olexiy_in_UKR

    Регистр.:
    2 дек 2007
    Сообщения:
    197
    Симпатии:
    756
    Спасибо.

    Тема закрыта.
     
  4. alexloobb

    alexloobb

    Регистр.:
    27 сен 2006
    Сообщения:
    165
    Симпатии:
    50
    я присоседюсь к топику так как для себя в свое время полностью так и не закрыл.
    Штирлиц вроде не делает пакетного преобразования.
    софт под винду есть, тот что толковый - платный, и лекарства актуального не нашлось, так что кто-то может выложит рабочий комплект
    по названиям софт, что решает такую задачу
    batchreplacer
    unifier, м.б. какой-то еще?

    вот разные рецепты под линукс, там все просто
    Код:
    !/bin/bash
    for file in `find ./ -type f -name \*.php -o -name \*.tpl -o -name \*.inc`; do \
    iconv -f CP1251 -t UTF-8 ${file} > ${file}.utf8 &&
    mv ${file}.utf8 ${file};
    done
    -------------------------------------------------
    !/bin/bash
    for file in `find ./ -type f -name \*.html -o -name \*.tpl -o -name \*.inc`; do \
    iconv -f CP1251 -t UTF-8 ${file} > ${file}.utf8 &&
    mv ${file}.utf8 ${file};
    done
    ------------------------------------------------------
    find . -type f -exec iconv -f cp1251 -t utf8 {} -o {}-utf8 \;
    
    -----------------------------------------
    
    #!/bin/bash
    for file in 'ls'
    do
    iconv -f cp1251 -t UTF8 -o "new_$file" "$file"
    done
    ------------------------------------------------------------------------------
    
    #! /bin/sh
    
    # Validate input parameters
    if [[ ! -d $1 ]]
    then
            echo "Usage: $0 ";
            exit 1
    fi
    
    # Crea los archivos temporales
    tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$
    trap "rm -f $tempfile" 0 1 2 5 15
    
    # Localiza todos los archivos en el directorio
    find $1 -type f > $tempfile;
    
    # Abre el archivo temporal
    exec 3< $tempfile
    
    while read -u3 filename
    do
            # Chequea el tipo de codificación del archivo
            typefile=$(file --mime "$filename");
            if [[ -n $(echo $typefile | grep "text/") ]]
            then
                    encoding=$(echo $typefile | cut -d'=' -f2);
                    if [[ $encoding != "utf-8" ]]
                    then
                            if [[ -n "$(iconv --list | grep -i $encoding)" ]]
                            then
                                    # Cambia la codificación
                                    tempfile2=`tempfile 2>/dev/null` || tempfile2=/tmp/test$$
                                    trap "rm -f $tempfile2″ 0 1 2 5 15
                                    iconv –from-code=$encoding –to-code=utf-8 "$filename" > $tempfile2
                                    mv -f $tempfile2 "$filename"
                                    echo "$filename: $encoding -> utf8″;
                            fi
                    fi
            fi;
    done;
    
    exec 3<&-
    
     
  5. Olexiy_in_UKR

    Olexiy_in_UKR

    Регистр.:
    2 дек 2007
    Сообщения:
    197
    Симпатии:
    756
    да, действительно, только что проверил - Штирлиц не катит к сожалению.
    Так что тема еще открыта (((

    З.Ы. Пора, блин, на линуха переходить:D
     
  6. Kaimi

    Kaimi

    Регистр.:
    28 окт 2007
    Сообщения:
    257
    Симпатии:
    253
  7. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    Штирлиц IV - Главное меню - Вид - Пакетное перекодирование

    в чем траблы?
     
  8. alexloobb

    alexloobb

    Регистр.:
    27 сен 2006
    Сообщения:
    165
    Симпатии:
    50
    хмм.. проверил - штирлиц фигачет в utf-16LE и добавляет BOM.
    Стандартно нужно в utf-8 и без BOM

    попробовал, не сработало(((
    т.е. если выбрать по одному файлу - то делает как надо,
    а в пакетном режиме - шыш, переписывает файл в ту же кирилицу дефолтную
    хз почему, или недоделали софтинку или заморочки с конфигами самой оси, т.е. стоит WinXP Corporate с руским MUI

    офф: что характерно, вспомнилось, я в свое время, давно правда, свой первый линукс осилил именно под эту задачу ;) :)
     
Статус темы:
Закрыта.