Convert files encoding

北城余情 提交于 2019-12-06 07:59:28

问题


I have a PHP application who's files encoding is Greek ISO (iso-8859-7). I want to convert the files to utf-8 but simply saving the files with utf-8 isn't enough since the Greek texts get garbled. Is there an "automatic" method to do this so that I can completely convert my app's encoding without having to go through each file and rewrite the texts?


回答1:


On a Linux system, if you are sure all files are currently encoded in ISO-8859-7, you can do this:

bash> find /your/path -name "*.php" -type f \
    -exec iconv "{}" -f ISO88597 -t UTF8 -o "{}.tmp" \; \
    -exec mv "{}.tmp" "{}" \;

This converts all PHP script files located in /your/path as well as all sub-directories. Remove -name "*.php" to convert all files.


Since you are under Windows, the easiest option would be a PHP script like this:

<?php
$path = realpath('C:\\your\\path');

$iterator = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($path), 
    RecursiveIteratorIterator::SELF_FIRST
);

foreach($iterator as $fileName => $file){
    if($file->isFile())
        file_put_contents(
            $fileName,
            iconv('ISO-8859-7', 'UTF-8', file_get_contents($fileName))
        );
}



回答2:


Try the iconv function

$new_string = iconv("ISO-8859-7", "UTF-8", $old_string);



回答3:


<?php
function writeUTF8File($filename,$content) { 
        $f=fopen($filename,"w"); 
        # Now UTF-8 - Add byte order mark 
        fwrite($f, pack("CCC",0xef,0xbb,0xbf)); 
        fwrite($f,$content); 
        fclose($f); 
}

?>



回答4:


The following code should work for you, it's a PowerShell script, you can Start > Run > powershell and paste code after modifying required lines.

$sourcepath = "d:\temp\old\"
$targetpath = "d:\temp\new\"
foreach ($file in Get-ChildItem $sourcepath -Filter *.php -Recurse) {
  $content = [System.IO.File]::ReadAllBytes($sourcepath + $file)
  $str = [System.Text.Encoding]::GetEncoding("ISO-8859-7").GetString($content)
  # $str = $str.Replace("ISO-8859-7", "UTF-8")
  [System.IO.File]::WriteAllText($targetpath + $file, $str)
}

You may remove # char on line 6 to make some replacements before saving.



来源:https://stackoverflow.com/questions/22921855/convert-files-encoding

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!