Как изменить кодирование из расширенного Текста ASCII неISO с разделителями строки CRLF к UTF-8?

Некоторые ресурсы истории Unix говорят, что CD был внешней командой в некоторый (довольно ранний) период разработки Unix. Это было специальной командой, которая смогла изменить текущий каталог родителя.

Вы видите рудименты этого исторического состояния в том, что Солярис имеет/usr/bin/cd как реальную команду, кроме того, для окружения builtins. Но я не уверен, это делает что-либо реальное в существующих системах.

Причем этот, поскольку внешняя команда была временным решением, которое истреблялось, как только разработчики Unix стали способными иметь оболочку builtins. Слишком дорого иметь целую команду (который должен иметь собственный процесс, быть загружен из диска, и т.д.) в месте, где простой системный вызов достаточно. Таким образом, это стало встроенным и, начиная с этого, не сделал изменял его состояние когда-либо.

Можно было создать оболочку, где почти любая команда становится встроенной; это - только своего рода компромисс дизайна. Например, CP, упомянутое здесь, могло быть хорошим кандидатом на это; и такое здание - в было реализовано в некоторых оболочках для MS-DOS. Но, в Unix, создании процесса и запуске является более дешевым, и нет никакой потребности изобрести функционально внутренне, если это не могло быть реализовано от другого процесса. Это включает CD, ulimit, выход, переменные манипуляции, команды потока управления (если, поскольку, в то время как, и т.д.) и т.д.

22
07.01.2014, 21:17
4 ответа

file говорит Вам “расширенный Текст ASCII неISO”, потому что он обнаруживает, что это:

  • скорее всего, “текстовый” файл от отсутствия управляющих символов (байт оценивает 0–31) кроме разрывов строки;
  • “расширенный ASCII”, потому что существуют символы вне диапазона ASCII (байт оценивает ≥128);
  • “не-ISO”, потому что существуют символы в диапазоне 128–159 (ISO 8859 резервирует этот диапазон для управляющих символов).

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

enca x.txt
enca -L polish x.txt

Для преобразования файла передайте -x опция: enca -L polish x.txt -x utf8 >x.utf8.txt

Если Вы не можете или не хотеть использовать Enca, можно предположить кодирование вручную. Немного оглядывания, сказанного меня, что это - польский текст и слова, является trwały, stały, usuważ, таким образом, мы ищем перевод где ³ł и æż. Это похоже на латинские 2 или латинские 10 или более вероятно (данный “не-ISO” CP1250, который Вы просматриваете как latin1. Для преобразования файла в UTF-8 можно использовать перекод или iconv.

recode CP1250..utf8 <x.txt >x.utf8.txt
iconv -f CP1250 -t UTF-8 <x.txt >x.utf8.txt
33
27.01.2020, 19:42

Вы пытались узнать, какое точное кодирование является x.txt? Вы получите список поддерживаемой кодировки с

iconv - список

Иногда это происходит со мной, что я получаю несоответствие между latin1 и utf8. Затем это часто помогает преобразовать его из и назад к utf8 и наоборот.

0
27.01.2020, 19:42

Откройте текстовый файл с помощью gedit и в диалоговом окне «Сохранить как ..» вы увидите текущую кодировку.

1
27.01.2020, 19:42

Я создал сценарий автоматического преобразования с использованием библиотеки enca , я использую его на моем NAS для преобразования субтитров в UTF-8, но его можно использовать для любого автоматического преобразования

Не стесняйтесь использовать :)

РЕДАКТИРОВАТЬ:

#!/bin/bash
LANGUAGE=czech
TO=utf8
CONVERT="enca -L $LANGUAGE -x $TO"

# Find and onvert
find ./ -type f -name "*.srt" | while read fn; do
  IS_TARGET=`enca "${fn}" | egrep -ow -m 1 'UTF-8|Unrecognized|KOI8-CS2|7bit ASCII|UCS-2|Macintosh Central European'`

    if [ "$IS_TARGET" != "UTF-8" ] &&
       [ "$IS_TARGET" != "UCS-2" ] &&
       [ "$IS_TARGET" != "Macintosh Central European" ] &&
       [ "$IS_TARGET" != "Unrecognized" ] &&
       [ "$IS_TARGET" != "7bit ASCII" ] &&
       [ "$IS_TARGET" != "KOI8-CS2" ]; then

        echo "${fn} ---- Will be converted!"
    # optional backup of original srt
        # cp "${fn}" "${fn}.bak"
        $CONVERT "${fn}"
    fi  

done
0
27.01.2020, 19:42

Теги

Похожие вопросы