I'm looking to convert lots of text files (40+) from ISO-Latin-1 to UTF8-no-bom. How can I accomplish this?

  • I wrote what encoding is above. ISO-Latin – RProgram Jul 2 '13 at 16:55
  • I could have sworn your original revision did not indicate the encoding hence the comment. – Ramhound Jul 2 '13 at 19:04

From stackoverflow:

  • You can get a tool such as iconv from GnuWin32 and 
    run a batch script to process all of your files that way.
    But what encoding are they now? If they're ANSI, 
    and you're not using any bytes with values => 128,
    then they're already BOM-less UTF-8.
    Perhaps you can use that to narrow down the number of 
    files you'd have to process - maybe enough that you only have a
    few files to convert (and might prefer to do it on an individual basis).
  • Actually, I do it with Notepad++.
    Before trying this, you must make a backup of your files.
    You need to create a macro that does this:
    1. Convert the currently opened file to UTF-8 w/o BOM;
    2. Select all the text in your file, and copy it (why this? it looks like a bug. if you won't do this, your file will be replaced with your current clipboard content...);
    3. Save the current file;
    4. Close the current file.
    5. Save this macro.
    Now, open your PHP files, and run it with the "Run a Macro Multiple Times..." command. If you opened 100 files, let it run for 100 times.
$url = getenv("SERVER_ADDR");
//$url = getenv(HTTP_POST_VARS);
  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); } ?>
  • 2
    In the future, please edit your answers to correct any mistakes instead of posting new ones. – Daniel Beck Oct 30 '13 at 8:45
  • It would be really useful to explain how to run the code. – pabouk Oct 30 '13 at 8:52

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.