Войти

Показать полную графическую версию : [решено] Изменение кодировки txt файла из ANSI в UTF-16 LE


crashtuak
19-08-2009, 15:25
Как через командную строку изменить кодировку txt файла из ANSI в UTF-16 LE, без разницы сторонними утилитами или без них, самое главное чтоб тихо, без окошек.

amel27
19-08-2009, 16:49
crashtuak, батник в ANSI кодировке, имя файла "File.txt":
@Echo Off
SetLocal EnableExtensions

Set $FILE=File.txt
Set $TEMP=File.tmp

CHCP 1251
Echo яю>%$TEMP%
CMD /U /C Type %$FILE% >>%$TEMP%

If Exist %$TEMP% DEL /F/Q %$FILE%
REN %$TEMP% %$FILE%

crashtuak
19-08-2009, 19:49
amel27, канешна спасибо, но это не то что нужно. У меня есть файл в ANSI (так показал АкелПад). А мне надо тот файл переделать в кодировку UTF-16 LE (но чтоб когда я его открыл АкелПадом я увидел надпись UTF-16 LE вместо ANSI). Может будут варианты?

amel27
20-08-2009, 04:56
crashtuak, у меня АкелПад после перекодировки показывает UTF-16 LE:

1. создаем батник в WIN-кодировке (в блокноте);
2. создаем TXT-файл в ANSI, типа:
CHCP 1251& FindStr /? >File.txt3. запускаем батник и проверяем результат: всё на месте (с точностью до первого символа). :)

Само собой, в таком варианте файл не должен содержать управляющих CMD-символов типа "&^|".

Проблему первого символа (BOM) можно решить созданием эталонного файла из двух байт: "яю" (в ANSI), и добавлять его в начало полученного файла через COPY. Из сторонних утилит использую recode из комплекта UnxUtils (http://sourceforge.net/projects/unxutils/files/unxutils/), но она тоже сама не добавляет BOM (http://en.wikipedia.org/wiki/Byte_Order_Mark).
recode cp1251..utf16-le <ansi.txt >utf16le.txt

amel27
20-08-2009, 06:14
вроде придумал как добавить BOM без COPY (текст батника в WIN-кодировке): :)
<Nul >utf16le.txt Set /P $VAR=яю
recode cp1251..utf16-le <ansi.txt >>utf16le.txt

crashtuak
20-08-2009, 09:12
amel27, у меня работает вот такой вариант:
recode cp1251..utf16-le <ansi.txt >>utf16le.txt
И без <Nul >utf16le.txt Set /P $VAR=яю
Соответственно BOM нету. с <Nul >utf16le.txt Set /P $VAR=яю
BOM тоже никак не появляется:(. Щас буду както ровнять криворукость свою :).

crashtuak
20-08-2009, 09:32
Во блин код:):
recode cp1251..utf16-le <ansi.txt >>utf16le.txt
COPY /b 1.txt + utf16le.txt end.txt
ansi.txt - исходный текст
1.txt - эталонного файла из двух байт: "яю" (в ANSI) »
end.txt - выходной файл с BOM

crashtuak
20-08-2009, 10:52
amel27, а есть ли существенная разница между Win и Unix кодировками? http://img23.imageshack.us/img23/6778/64338439.jpg (http://img23.imageshack.us/i/64338439.jpg/)
Стоил ли утруждаться, чтоб в выделенной области красовалось Win?

amel27
20-08-2009, 11:19
есть ли существенная разница между Win и Unix кодировками? »в Win строки заканчиваются (обычно) на CRLF, а в Unix на LF (всегда)

crashtuak
20-08-2009, 11:35
amel27, а как же тогда в Win переделать все?

amel27
20-08-2009, 11:41
crashtuak, так вроде правильно получается:
recode cp1251/..utf16-le <ansi.txt >utf16le_3.txt

crashtuak
20-08-2009, 11:57
amel27, огромнОООООе спасибо :). Вы прям компьютерный Гарри Поттер какойто :). На все ответ найти можете :).




© OSzone.net 2001-2012