我用phpExcel插件导入Excel文件。从Excel文件中读取的 法语 字符,输出来时是乱码,请问是怎么回事,英语,日语,韩语的就没问题。Excel表中字符串为:ELM327 OBD2 VGate de numérisation avancés Bluetooth outil d'analyse
读取后输出字符串为:ELM327 OBD2 VGate de num�risation avanc�s Bluetooth outil d'analyse那个加音标的字母e成了乱码。
php文件页面编码格式为utf-8。
$data->setOutputEncoding('UTF-8');

解决方案 »

  1.   

    就这乱码的格式来看。
    建议你试试 iconv($str , "gb2312" , "utf-8" );
      

  2.   

    法文是单字节字符集
    é 的 扩展ascii 码值是 233 即 chr(233)gbk 内码 0xa8 0xa6
    utf-8 内码 0xc3 0xa9所以尽管你 setOutputEncoding('UTF-8') 了,但原文并不是 utf-8 的,所以取回后就成了乱码setOutputEncoding 应该是设置输出的字符集吧?
    应该还有一个类似 setInputEncoding 的方法用来设置输入的字符集吧?
      

  3.   


    是的。
    有setInputEncoding函数。CSV.php
    public function setInputEncoding($pValue = 'UTF-8')
    {
    $this->_inputEncoding = $pValue;
    return $this;
    }SYLK.php
    public function setInputEncoding($pValue = 'ANSI')
    {
    $this->_inputEncoding = $pValue;
    return $this;
    }
      

  4.   

    知识点
    八.德文/法文
    Unicode範圍: 00C0-00FF(混用英文字母)
    備註:字母上面有2點者為德文, 字母上面有重音符號者為法文
    locale編碼: ANSI
    1.ANSI
    HTML charset: iso-8859-1, windows-1252
    RTF charset: 0
    編碼方式: 1 byte語系对于法文应显式的执行
    $data->setInputEncoding('ANSI');而不是默认的 UTF-8
      

  5.   


    文件编码为utf-8;$data = new Spreadsheet_Excel_Reader();
    $data->setOutputEncoding('UTF-8');
    $data->read($file_name);
    $data_array = $data -> getExcelResult();
    print_r($data_array);读取Excel文件,print_r()输出。浏览器 -> 查看 -> 字符编码 -> Unicode(UTF-8)时显示为乱码。
        ELM327 OBD2 VGate de num�risation avanc�s Bluetooth outil d'analyse浏览器 -> 查看 -> 字符编码 -> 西方(ISO-8859-1)时显示正常。
        ELM327 OBD2 VGate de numérisation avancés Bluetooth outil d'analyse
    请问这样我该怎么转码呢?
    iconv('ISO-8859-1', 'UTF-8', $data_array) 
    上面的转法不可以。
      

  6.   

    ANSI,应该不使用iconv也没问题的,试试
      

  7.   


    $data->setOutputEncoding('UTF-8');
    $data->setOutputEncoding('ANSI');
    $data->setOutputEncoding('ISO-8859-1');
    这里不管用什么编码格式输出都是乱码。浏览器 -> 查看 -> 字符编码 -> 西方(ISO-8859-1)时显示正常。
    必须这样才显示正常。
      

  8.   

    $data = new Spreadsheet_Excel_Reader();
    $data->setInputEncoding('ANSI');
    $data->setOutputEncoding('UTF-8');
    $data->read($file_name);
    $data_array = $data -> getExcelResult();
    print_r($data_array);您这样试过了吗?
      

  9.   

    读取Excel文件,print_r()输出。浏览器 -> 查看 -> 字符编码 -> Unicode(UTF-8)时显示为乱码。
        ELM327 OBD2 VGate de num�risation avanc�s Bluetooth outil d'analyse浏览器 -> 查看 -> 字符编码 -> 西方(ISO-8859-1)时显示正常。
        ELM327 OBD2 VGate de numérisation avancés Bluetooth outil d'analyse
    $data->setInputEncoding(''); 
    PHPExcel导入Excel时这个函数是没有的。
    只有导入cvs文件时才有用到。数据从Excel读取打印出来时 浏览器 -> 查看 -> 字符编码 -> 西方(ISO-8859-1)时显示正常。
    这样来说是不是表明,只要将ISO-8859-1转成utf-8码就可以了呢?
    我文件、数据库编码都是utf-8。
      

  10.   

    本帖最后由 xuzuning 于 2012-11-28 09:43:05 编辑
      

  11.   


    文件页面为utf-8。
    读取Excel文件,print_r()输出。浏览器 -> 查看 -> 字符编码 -> Unicode(UTF-8)时显示为乱码。
        ELM327 OBD2 VGate de num�risation avanc�s Bluetooth outil d'analyse浏览器 -> 查看 -> 字符编码 -> 西方(ISO-8859-1)时显示正常。
        ELM327 OBD2 VGate de numérisation avancés Bluetooth outil d'analyse请问我要如何转码才能不用设置查看编码格式显示正常呢?以下转码不可用。
    iconv("UTF-8", "ISO-8859-1//TRANSLIT", $text)
    iconv("UTF-8", "ISO-8859-1//IGNORE", $text)
    iconv("UTF-8", "ISO-8859-1", $text)
      

  12.   

    要这样转 iconv("ISO-8859-1", "UTF-8", $text)