Strona główna Ubuntu C++ Hardware HTML i javascript Java Software SQL

Bash – konwersja plików tekstowych kodowanych jako cp1250 na utf8.

Dodano: 2013-01-11

Jeżeli nie możemy odczytać polskich znaków prawidłowo z pliku tekstowgo znajdującego się w systemie linux, prawdopodobnie został on zakodowany przez system Windows jako cp1250.

Sprawdzić format kodowania dowolnego pliku można za pomocą komendy:

file -bi [nameFile].

Jeżeli zwrócony wynik będzie wyglądał następująco text/plain; charset=unknown-8bit to strona kodowa pliku jest cp1250.

Konwersję plików z cp1250 na utf8 można wykonać za pomocą komendy poniżej:

iconv -f cp1250 -t utf8 [fileInput] > [fileOutput]

Poniżej skrypt, który wyszukuje w miejscu docelowym wszystkie pliki w kodowaniu cp1250 i konwertuje je na utf8. Sposób użycia:

./cp1250toutf8.bash [destintionFolder]

#!/bin/bash

if [ "$1" = "--help" ]; then
	echo "The script converts to utf8, cp1250 format files.";
	echo "The script has one parameter";
	echo "	--help - description, what you can do,";
	echo "	[pathToDirectory] - the path of the folder, optional";
	exit 0;
fi;

if [ "$1" = ""  ]; then
	DEST=`pwd`"/";
else
	if [ ! -d $1 ]; then
		echo "";
		echo "The argument \""$1"\" is not directory!!!";
		echo "";
		exit 1;
	fi;
	DEST=$1"/";
fi;

echo "Start working in: \""$DEST"\"";

for FF in $DEST*; do
	rr=`file -bi "$FF"`;
	if [ "$rr" = "text/plain; charset=unknown-8bit" ]; then
		echo "\""`basename "$FF"`"\" is cp1250.";
		iconv -f cp1250 -t utf8 "$FF" > "$FF.utf8"
		mv "$FF.utf8" "$FF";
	fi;
done;

exit 0;