我是編碼新手,所以請耐心等待。 我正在一個用戶上傳csv的系統上工作,我需要做的是顯示內容,然後將其保存在數據庫中。 (utf-8編碼)Ÿç在csv字符不顯示php
我被要求解決一些法文字母字符顯示不正確的問題。我幾乎解決了這個問題,我顯示的字符,如
ÀàÂâÆÄäÇçÉéÈèÊêËëÎîÏïÔôœÖöÙùÛûÜüÿ
但是在標題Ÿ
Œ
提到的兩個沒有在網頁上顯示正確呢。
這是到目前爲止我的PHP代碼:
// say in the csv we have "ÖüÜߟÀàÂ"
$content = file_get_contents(addslashes($file_name));
var_dump($content) // output: string(54) "���ߟ��� "
if(!mb_detect_encoding($content, 'UTF-8, ISO-8859-1', true)){
$data = iconv('macintosh', 'UTF-8', $content);
}
// deal with known encoding types
else if(mb_detect_encoding($content, 'UTF-8, ISO-8859-1', true) == 'ISO-8859-1'){
//$data = mb_convert_encoding($content, 'UTF-8', mb_detect_encoding($content, 'UTF-8, ISO-8859-1', true)); // does not work
$data = iconv('ISO-8859-1', 'UTF-8', $content); //does not work
}else if(mb_detect_encoding($content, 'UTF-8, ISO-8859-1', true) == 'UTF-8'){
$data = $content
}
//if i print $data "Ÿ Œ " are not printed out... they got lost somewhere
//do more stuff here
我處理的文件有ISO-8859-1
的編碼類型(當我打印出mb_detect_encoding($content, 'UTF-8, ISO-8859-1', true)
它顯示ISO-8859-1
)。
有沒有人有關於如何處理這種特殊情況的想法?
哇!看起來就是這樣! 如果我正確的話,windows-1252是ISO-8859-1的超集。所以即使文件真正被編碼爲ISO-8859-1 iconv('windows-1252','UTF-8',$ content)也無妨,我是否正確? 我希望...我一直在努力掙扎。我會做一些測試,然後接受答案 – mikey 2015-02-05 22:03:36
技術上不是超集,但唯一的區別是範圍0x80 ... 0x9F是保留給ISO-8859-1中的控制字符(沒有指定任何特定的含義),而在windows-1252中,其中很多都被分配給可打印字符(以及其他未定義的位置)。在ISO-8859-1中實際使用控制字符的這些位置時遇到文本文件會很奇怪。更有可能的是windows-1252的意思是或者有一些處理錯誤。 – 2015-02-06 07:03:39