2011-02-13 289 views

回答

45

ASCII是UTF-8的一個子集,因此,如果一個文件是ASCII那麼它已經是UTF8。

+0

字,如果ASCII「伸長」 ASCII,那麼你可能會遇到的問題。 https://en.wikipedia.org/wiki/Extended_ASCII – Azeroth2b 2017-03-29 14:26:48

19

如果您確定您當前的編碼是純ASCII,那麼您不必執行任何操作,因爲ASCII已經是有效的UTF-8。

但是,如果你還是要轉換,只是爲了確保它的UTF-8,那麼你可以使用的iconv

$string = iconv('ASCII', 'UTF-8//IGNORE', $string); 

的忽略將放棄任何無效字符,以防萬一有些人沒有有效的ASCII。

+0

我一直把「IGNORE」理解爲自動/隱含錯誤。 – tchrist 2011-02-13 19:22:31

2

「ASCII是UTF-8的子集,所以...」 - 所以UTF-8是集合? :)

換句話說:任何字符串code points從X00建立到0x7F部分具有ASCII和UTF-8沒有區別表示(字節序列)。轉換這樣的字符串是毫無意義的。

+1

這裏的關鍵短語是「從x00到x7F的代碼點」。如果你的「ASCII」代碼點從x10到xFF,那麼你需要做更多的工作。 – Azeroth2b 2017-03-29 14:29:10

2

使用mb_convert_encoding將ASCII轉換爲UTF-8。更多信息here

$string = "chárêctërs"; 
print(mb_detect_encoding ($string)); 

$string = mb_convert_encoding($string, "UTF-8"); 
print(mb_detect_encoding ($string)); 
0

用iconv看起來像最好的解決辦法,但我我來說,我必須注意形成這樣的功能:「檢測到輸入字符串非法字符中」(不igonore)。 我用2個函數來處理ASCII字符串將其轉換爲ASCII碼數組,然後連載:謹慎

public static function ToAscii($string) { 
    $strlen = strlen($string); 
    $charCode = array(); 
    for ($i = 0; $i < $strlen; $i++) { 
     $charCode[] = ord(substr($string, $i, 1)); 
    } 
    $result = json_encode($charCode); 
    return $result; 
} 

public static function fromAscii($string) { 
    $charCode = json_decode($string); 
    $result = ''; 
    foreach ($charCode as $code) { 
     $result .= chr($code); 
    }; 
    return $result; 
}