Показать полную графическую версию : [решено] Изменение кодировки txt файла из ANSI в UTF-16 LE
crashtuak
19-08-2009, 15:25
Как через командную строку изменить кодировку txt файла из ANSI в UTF-16 LE, без разницы сторонними утилитами или без них, самое главное чтоб тихо, без окошек.
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). Может будут варианты?
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
вроде придумал как добавить 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?
есть ли существенная разница между Win и Unix кодировками? »в Win строки заканчиваются (обычно) на CRLF, а в Unix на LF (всегда)
crashtuak
20-08-2009, 11:35
amel27, а как же тогда в Win переделать все?
crashtuak, так вроде правильно получается:
recode cp1251/..utf16-le <ansi.txt >utf16le_3.txt
crashtuak
20-08-2009, 11:57
amel27, огромнОООООе спасибо :). Вы прям компьютерный Гарри Поттер какойто :). На все ответ найти можете :).
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.