【问题标题】:Ÿ Œ charcters in csv don't get displayed phpŸ Œ csv 中的字符不会显示 php
【发布时间】:2015-02-05 20:46:14
【问题描述】:

我是编码新手,所以请耐心等待。 我正在开发一个用户上传 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)。

有没有人知道如何处理这种特殊情况?

【问题讨论】:

    标签: php csv utf-8 character-encoding


    【解决方案1】:

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

    因此,您可能应该将 windows-1252 添加到已识别编码列表中并且将已识别的 ISO-8859-1 视为 windows-1252,即使用 iconv('windows-1252', 'UTF-8', $content),即使 ISO-8859-1 具有蜜蜂识别。错误标记为 ISO-8859-1 的 Windows-1252 数据非常很常见。

    【讨论】:

    • 哇!看起来就是这样!如果我是正确的,windows-1252 是 ISO-8859-1 的超集。因此,即使文件真正编码为 ISO-8859-1 iconv('windows-1252', 'UTF-8', $content) 仍然可以工作,对吗?我希望...我一直在努力解决这个问题。我会做一些测试然后接受答案
    • 技术上不是超集,但唯一的区别是范围 0x80...0x9F 在 ISO-8859-1 中保留用于控制字符(不指定任何特定含义),而在 windows-1252 中其中许多被分配给可打印字符(以及其他未定义的位置)。遇到 ISO-8859-1 中的文本文件实际上使用这些位置作为控制字符会很奇怪。更有可能是 windows-1252 的意思或存在一些处理错误。
    猜你喜欢
    • 1970-01-01
    • 2012-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-10
    • 2013-10-23
    • 1970-01-01
    • 2015-11-26
    相关资源
    最近更新 更多