Я хочу конвертировать много текстовых файлов (40+) из ISO-Latin-1 в UTF8-no-bom. Как я могу сделать это?
2 ответа
1
Из stackoverflow:
Вы можете получить такой инструмент, как iconv, из GnuWin32 и запустить пакетный скрипт для обработки всех ваших файлов таким способом. Но что они за кодировка сейчас? Если они ANSI, и вы не используете байты со значениями => 128, то они уже без спецификации UTF-8. Возможно, вы можете использовать это, чтобы сузить число файлов, которые вам нужно будет обработать - возможно, достаточно, чтобы у вас было всего несколько файлов для преобразования (и вы можете предпочесть сделать это на индивидуальной основе).
На самом деле, я делаю это с помощью Notepad++. Прежде чем попробовать это, вы должны сделать резервную копию ваших файлов. Вам нужно создать макрос, который делает это:
- Конвертировать текущий открытый файл в UTF-8 без спецификации;
- Выделите весь текст в вашем файле и скопируйте его (почему это? это похоже на ошибку. если вы этого не сделаете, ваш файл будет заменен вашим текущим содержимым буфера обмена ...);
- Сохранить текущий файл;
- Закройте текущий файл.
- Сохраните этот макрос.
PHP-файлы и запустите их с помощью команды «Запуск макроса несколько раз ...». Если вы открыли 100 файлов, дайте ему поработать 100 раз.
-1
<?php
$url = getenv("SERVER_ADDR");
//$url = getenv(HTTP_POST_VARS);
$rootdir='d:\\xampp\\htdocs\\ecoder';
$dir=".";
$files=scan_dir($rootdir);
foreach ($files as $file) {
$info = pathinfo($file);
$extF =$info["extension"];
if ($extF == "php" || $extF == "txt" || $extF == "js" || $extF == "css") {
echo $file ."
";
$data = file_get_contents($file);
writeUTF8File($file, $data);
echo $file.' was converted to UTF8
';
}
}
//use this function to get all files inside a directory (including subdirectories)
function scan_dir($dir) {
$arrfiles = array();
if (is_dir($dir)) {
if ($handle = opendir($dir)) {
chdir($dir);
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
if (is_dir($file)) {
$arr = scan_Dir($file);
foreach ($arr as $value) {
$arrfiles[] = $dir."/".$value;
}
} else {
$arrfiles[] = $dir."/".$file;
}
}
}
chdir("../");
}
closedir($handle);
}
return $arrfiles;
}
function writeUTF8File($filename,$content) { //บันทึกไฟล์เป็น UTF8
$f=fopen($filename,"w");
# Now UTF-8 - Add byte order mark
fwrite($f, pack("CCC",0xef,0xbb,0xbf));
fwrite($f,$content);
fclose($f);
}
?>
