Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Изменение кодировки txt файла из ANSI в UTF-16 LE (http://forum.oszone.net/showthread.php?t=148368)

crashtuak 19-08-2009 15:25 1197529

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

amel27 19-08-2009 16:49 1197605

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 1197707

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

amel27 20-08-2009 04:56 1198017

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

1. создаем батник в WIN-кодировке (в блокноте);
2. создаем TXT-файл в ANSI, типа:
Код:

CHCP 1251& FindStr /? >File.txt
3. запускаем батник и проверяем результат: всё на месте (с точностью до первого символа). :)

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

Проблему первого символа (BOM) можно решить созданием эталонного файла из двух байт: "яю" (в ANSI), и добавлять его в начало полученного файла через COPY. Из сторонних утилит использую recode из комплекта UnxUtils, но она тоже сама не добавляет BOM.
Код:

recode cp1251..utf16-le <ansi.txt >utf16le.txt

amel27 20-08-2009 06:14 1198027

вроде придумал как добавить BOM без COPY (текст батника в WIN-кодировке): :)
Код:

<Nul >utf16le.txt Set /P $VAR=яю
recode cp1251..utf16-le <ansi.txt >>utf16le.txt


crashtuak 20-08-2009 09:12 1198070

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 1198092

Во блин код:):
Код:

recode cp1251..utf16-le <ansi.txt >>utf16le.txt
COPY /b 1.txt + utf16le.txt end.txt

ansi.txt - исходный текст
1.txt -
Цитата:

Цитата amel27
эталонного файла из двух байт: "яю" (в ANSI) »

end.txt - выходной файл с BOM

crashtuak 20-08-2009 10:52 1198140

amel27, а есть ли существенная разница между Win и Unix кодировками?
Стоил ли утруждаться, чтоб в выделенной области красовалось Win?

amel27 20-08-2009 11:19 1198162

Цитата:

Цитата crashtuak
есть ли существенная разница между Win и Unix кодировками? »

в Win строки заканчиваются (обычно) на CRLF, а в Unix на LF (всегда)

crashtuak 20-08-2009 11:35 1198180

amel27, а как же тогда в Win переделать все?

amel27 20-08-2009 11:41 1198191

crashtuak, так вроде правильно получается:
Код:

recode cp1251/..utf16-le <ansi.txt >utf16le_3.txt

crashtuak 20-08-2009 11:57 1198212

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


Время: 19:30.

Время: 19:30.
© OSzone.net 2001-