Ÿ Œ csv 中的字符不会显示 php


٠Πcharcters in csv don't get displayed php

我是编码新手,所以请耐心等待。我正在开发一个用户上传csv的系统,我需要做的是显示内容,然后将其保存在数据库中。(UTF-8 编码(

我被要求解决一些未正确显示的法语字母字符的问题。我几乎解决了问题,我正在显示诸如

ÀàÂâÆÄäÇçÉéÈèÊêËëÎîÏïÔôœÖöÙùÛûÜüÿ

但是,标题Ÿ Œ中提到的两个尚未在网页上正确显示。

这是我到目前为止的 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(。

有没有人对如何处理这种特殊情况有想法?

字符 Ÿ 和 Œ 在 ISO-8859-1 中不可表示。似乎传入的数据实际上是 windows-1252(Windows Latin 1(编码的,因为 windows-1252 在某些代码位置具有图形字符,包括 Ÿ 和 Œ,这些字符是为 ISO-8859-1 中的控制字符保留的。

因此,您可能应该将 windows-1252 添加到可识别的编码列表中,并将已识别的 ISO-8859-1

视为 windows-1252即即使 ISO-8859-1 已识别,也要使用 iconv('windows-1252', 'UTF-8', $content)。错误标记为 ISO-8859-1 的 Windows-1252 数据非常常见。