I need to convert a text file to UTF-8 format via Windows command prompt. This needs to be done on another machine and I do not have rights to install software on that machine. I need something like:
c:\notepad source-file target-file --encoding option
Is there a Windows command prompt utility which can do it?
asked Jan 5, 2017 at 13:58
I need to convert a text file to utf-8 format via windows command prompt
You can easily do this with PowerShell:
Get-Content .\test.txt | Set-Content -Encoding utf8 test-utf8.txt
Further Reading
- Convert from most encodings to utf8 with powershell
answered Jan 5, 2017 at 14:38
DavidPostill♦DavidPostill
154k77 gold badges354 silver badges395 bronze badges
13
Use iconv
from GNUWin32 pack. It is much faster, especially if your files are about or more than 1 Gb.
"C:\Program Files (x86)\GnuWin32\bin\iconv.exe" -f cp1251 -t utf-8 source.txt > result.txt
answered Feb 21, 2018 at 15:09
Raul N-kRaul N-k
711 silver badge1 bronze badge
3
Here is for each convert *.text file to *.sql file:
foreach ($file in get-ChildItem *.txt) {
Echo $file.name
Get-Content $file | Set-Content -Encoding utf8 ("$file.name" +".sql")
}
answered May 20, 2019 at 10:20
1
You can do this from the command prompt as follows:
powershell -command "Get-Content .\test.txt" > test-utf8.txt
It turns out that piping the output to a file from the command prompt saves as utf-8.
answered Sep 30, 2020 at 20:49
1
POWERSHELL: # Assumes Windows PowerShell, use -Encoding utf8BOM with PowerShell Core. For multiple files:
FIRST SOLUTION:
$files = Get-ChildItem c:\Folder1\ -Filter *.txt
foreach ($file in $files) {
Get-Content $file.FullName | Set-Content "E:\Temp\Destination\$($file.Name)" -Encoding utf8BOM
}
OR, SECOND SOLUTION (for multiple files):
get-item C:\Folder1*.* | foreach-object {get-content -Encoding utf8BOM $_ | out-file ("C:\Folder1" + $_.Name) -encoding default}
OR, THE THIRD SOLUTION: (only for 2 files)
$a = "C:/Folder1/TEST_ro.txt"
$b = "C:/Folder1/TEST_ro-2.txt"
(Get-Content -path $a) | Set-Content -Encoding UTF8BOM -Path $b
answered Aug 1, 2022 at 14:19
Just MeJust Me
8161 gold badge16 silver badges40 bronze badges
For those who want to batch convert several files (e.g.: all *.txt
files in folder and sub-folders):
dir *.txt -Recurse | foreach {
# May remove the line below if you are confident
Copy-Item $_ $_.bkp
# Note that since we are reading and saving to the same file,
# we need to enclose the command in parenthesis so it fully executes
# (reading all content and closing the file) before proceeding
(Get-Content $_) | Set-Content -Encoding utf8 $_
}
answered Apr 12 at 13:46
You must log in to answer this question.
Not the answer you’re looking for? Browse other questions tagged
.
Not the answer you’re looking for? Browse other questions tagged
.
I need to convert a text file to UTF-8 format via Windows command prompt. This needs to be done on another machine and I do not have rights to install software on that machine. I need something like:
c:\notepad source-file target-file --encoding option
Is there a Windows command prompt utility which can do it?
asked Jan 5, 2017 at 13:58
I need to convert a text file to utf-8 format via windows command prompt
You can easily do this with PowerShell:
Get-Content .\test.txt | Set-Content -Encoding utf8 test-utf8.txt
Further Reading
- Convert from most encodings to utf8 with powershell
answered Jan 5, 2017 at 14:38
DavidPostill♦DavidPostill
154k77 gold badges354 silver badges395 bronze badges
13
Use iconv
from GNUWin32 pack. It is much faster, especially if your files are about or more than 1 Gb.
"C:\Program Files (x86)\GnuWin32\bin\iconv.exe" -f cp1251 -t utf-8 source.txt > result.txt
answered Feb 21, 2018 at 15:09
Raul N-kRaul N-k
711 silver badge1 bronze badge
3
Here is for each convert *.text file to *.sql file:
foreach ($file in get-ChildItem *.txt) {
Echo $file.name
Get-Content $file | Set-Content -Encoding utf8 ("$file.name" +".sql")
}
answered May 20, 2019 at 10:20
1
You can do this from the command prompt as follows:
powershell -command "Get-Content .\test.txt" > test-utf8.txt
It turns out that piping the output to a file from the command prompt saves as utf-8.
answered Sep 30, 2020 at 20:49
1
POWERSHELL: # Assumes Windows PowerShell, use -Encoding utf8BOM with PowerShell Core. For multiple files:
FIRST SOLUTION:
$files = Get-ChildItem c:\Folder1\ -Filter *.txt
foreach ($file in $files) {
Get-Content $file.FullName | Set-Content "E:\Temp\Destination\$($file.Name)" -Encoding utf8BOM
}
OR, SECOND SOLUTION (for multiple files):
get-item C:\Folder1*.* | foreach-object {get-content -Encoding utf8BOM $_ | out-file ("C:\Folder1" + $_.Name) -encoding default}
OR, THE THIRD SOLUTION: (only for 2 files)
$a = "C:/Folder1/TEST_ro.txt"
$b = "C:/Folder1/TEST_ro-2.txt"
(Get-Content -path $a) | Set-Content -Encoding UTF8BOM -Path $b
answered Aug 1, 2022 at 14:19
Just MeJust Me
8161 gold badge16 silver badges40 bronze badges
For those who want to batch convert several files (e.g.: all *.txt
files in folder and sub-folders):
dir *.txt -Recurse | foreach {
# May remove the line below if you are confident
Copy-Item $_ $_.bkp
# Note that since we are reading and saving to the same file,
# we need to enclose the command in parenthesis so it fully executes
# (reading all content and closing the file) before proceeding
(Get-Content $_) | Set-Content -Encoding utf8 $_
}
answered Apr 12 at 13:46
You must log in to answer this question.
Not the answer you’re looking for? Browse other questions tagged
.
Not the answer you’re looking for? Browse other questions tagged
.
Embed
What would you like to do?
Bash script for recursive file convertion windows-1251 —> utf-8
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# Recursive file convertion windows-1251 —> utf-8 | |
# Place this file in the root of your site, add execute permission and run | |
# Converts *.php, *.html, *.css, *.js files. | |
# To add file type by extension, e.g. *.cgi, add ‘-o -name «*.cgi»‘ to the find command | |
find ./ -name «*.php« -o -name «*.html« -o -name «*.css« -o -name «*.js« -type f | | |
while read file | |
do | |
echo « $file« | |
mv $file $file.icv | |
iconv -f WINDOWS-1251 -t UTF-8 $file.icv > $file | |
rm -f $file.icv | |
done |
Основной утилитой перекодировки в нашем случае будет iconv. При помощи iconv запросто можно перекодировать один файл:
iconv -f WINDOWS-1251 -t UTF-8 src_filename > dst_filename
iconv --list - список кодировок.
Например: WINDOWS-1251, UTF-8, UTF-16, UNICODE, KOI8-R, ISO-8859-5, CP866
Скрипт для нескольких файлов (в примере все файлы с расширением txt
#!/bin/bash
FILES=./*.txt
for i in $FILES
do
echo \"Converting $i from WINDOWS-1251 to UTF-8 encoding…\"
mv $i $i.icv
iconv -f WINDOWS-1251 -t UTF-8 $i.icv > $i
rm -f $i.icv
done
Для выполнения скрипта не забудьте назначить права и можно положить в системную папку, чтобы можно было выполнить в любой папке. Будьте внимательны, перезаписывая файлы!
После конвертирования файлов проекта, если проект пользуется базой MySQL, нужно сконвертировать и содержимое таблиц.
mysql> ALTER TABLE mytable CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
Источник1
Источник2
В общем случае, перекодировать можно в любом направлении, не обязательно именно в utf-8. Можно перекодировать между кириллическими кодировками, например, из koi-8 в cp1251, из utf-8 в koi-8, из utf-8 в cp1251 и обратно. Также рассмотрим ситуацию когда нужно изменить кодировку файлов не только в текущей директории, но и во вложенных.
В Linux перекодировку файлов удобно делать утилитами recode или enconv. Есть и другие перекодировщики, но про них пусть кто-то другой напишет.
Установить recode:
sudo yum install recode
Для использования enconv нужно установить пакет enca:
sudo yum install enca
Обе команды — recode и enconv — имеют кучу возможных опций, в простейших случаях для перекодирования одного или нескольких файлов в одной директории использование такое:
recode cp1251..utf8 myfile.txt
recode cp1251..utf8 *.txt
enconv -L russian -x utf8 myfile.txt
enconv -L russian -x utf8 *.txt
На что следует обратить внимание: для команды recode надо указать направление перекодировки (как минимум, исходную кодировку, в примере это cp1251; если не указана конечная кодировка, то программа заглянет в переменные окружения LC_ALL, LC_CTYPE, LANG). Для enconv указывать направление перекодировки необязательно вообще: программа способна определить исходную кодировку, проанализировав текст файла, а конечная кодировка будет взята из переменных окружения.
То есть, если надо перекодировать файлы в вашу «обычную» кодировку, используемую в системе, примеры могут выглядеть так:
recode cp1251 *.txt enconv -L russian *.txt
Для того, чтобы программа enconv точнее могла определить исходную кодировку файла, ей можно помочь, подсказав, на каком языке написан текст в файле. В нашем примере указан русский язык: «-L russian».
Список языков, известных программе, можно посмотреть так:
enca --list languages
enca — это не опечатка. Программа enconv является частью пакета enca.
Результат:
belarusian: CP1251 IBM866 ISO-8859-5 KOI8-UNI maccyr IBM855 KOI8-U bulgarian: CP1251 ISO-8859-5 IBM855 maccyr ECMA-113 czech: ISO-8859-2 CP1250 IBM852 KEYBCS2 macce KOI-8_CS_2 CORK estonian: ISO-8859-4 CP1257 IBM775 ISO-8859-13 macce baltic croatian: CP1250 ISO-8859-2 IBM852 macce CORK hungarian: ISO-8859-2 CP1250 IBM852 macce CORK lithuanian: CP1257 ISO-8859-4 IBM775 ISO-8859-13 macce baltic latvian: CP1257 ISO-8859-4 IBM775 ISO-8859-13 macce baltic polish: ISO-8859-2 CP1250 IBM852 macce ISO-8859-13 ISO-8859-16 baltic CORK russian: KOI8-R CP1251 ISO-8859-5 IBM866 maccyr slovak: CP1250 ISO-8859-2 IBM852 KEYBCS2 macce KOI-8_CS_2 CORK slovene: ISO-8859-2 CP1250 IBM852 macce CORK ukrainian: CP1251 IBM855 ISO-8859-5 CP1125 KOI8-U maccyr chinese: GBK BIG5 HZ none:
Как перекодировать файлы из/в utf-8, cp1251, koi8 и т. д. рекурсивно в поддиректориях
Для рекурсивного изменения кодировки файлов надо привлечь команду find, затем перекодировать то, что она нашла.
Среди множества опций команды find имеется набор для выполнения действий над найденными файлами. Нас интересует опция «-exec command {} ;».
Здесь:
command — команда, которую надо выполнить для каждого найденного файла;
{} — вместо скобок будет подставлено имя файла, найденного командой find;
; — точка с запятой указывает для команды find, в каком месте заканчиваются параметры команды command.
Надо иметь в виду, что «{}» и «;» может понадобиться экранировать с помощью одинарных кавычек или «\», чтобы предотвратить интерпретацию командной оболочкой (shell expansion).
Собираем всё вместе. Чтобы перекодировать из cp1251 (windows-1251) в utf-8 рекурсивно в поддиректориях все файлы, имена которых заканчиваются на ‘.txt’, надо выполнить:
find /path/to/dir -name '*.txt' -exec recode cp1251..utf8 '{}' \;
или
find /path/to/dir -name '*.txt' -exec enconv -L russian -x utf8 '{}' \;
Ура!