utf8_encode()无法正确转换少数非英语/变音字符

时间:2017-05-12 08:15:09

标签: php encoding utf-8 ansi

我有非常奇怪的情况。我的csv文件中的以下文本和文件在notpade ++上显示为ANSI编码。 enter image description here

Œœ Ÿ 654123áÃàÀâääÄãÃåÅæÆçÇéÉèÈêÊëËíÍìÌîÎïÏñÑóÓòÒôÔöÖõÕŒœúÚùÙûÛÜÜÿ

以下是我的示例代码:

<?php
header('Content-Type: text/html; charset=UTF-8');

$handle = fopen("unicode.csv", "r");


while (($line = fgets($handle)) !== FALSE)
{
    $cur_encoding = mb_detect_encoding($line) ; 
    if($cur_encoding == "UTF-8" && mb_check_encoding($line,"UTF-8")) 
    {
        echo "\r\n UTF-8".$line; 
    }
    else 
    {
        echo "\r\n encode UTF-8".utf8_encode($line); 
    }
}?>

我发现的代码问题:

  1. 无法检测到编码。
  2. 缺少两个字符。 (Œœ和Ÿ)
  3. 请帮我找出为什么缺少这两个字符的原因。 另一个奇怪的行为是它在Chrome中显示角色但在FF或IE中没有 注意:如果我使用Notepad ++将编码转换为UTF-8,我能够成功读取。所以请不要建议这个解决方案。 Get the csv file here

1 个答案:

答案 0 :(得分:-1)

试试这个:

$encoding = mb_detect_encoding($line, array( 
    'UTF-8', 'ASCII'
));

var_dump(iconv($encoding, 'UTF-8', $line));exit;