CSV文件(非英语)(希伯来语等)

时间:2019-01-20 07:58:43

标签: csv encoding hebrew

我有一个可以访问cPanel的托管站点,在这里我每天都有执行PHP脚本的cron作业。该脚本将MySQL表导出为CSV。然后,我在办公室的Windows上有一个计划的工作,可以将该CSV通过FTP传输到本地计算机。到目前为止,一切都很好。

但是MySQL表中混合了英语和希伯来语数据。通过cPanel的FileManager,我可以在创建的CSV中正确看到希伯来语,但是将其通过FTP传输到本地计算机后,希伯来语是不可读的。

编辑:

在Office-2016中打开下载的CSV时,问题仍然存在。使用Notepad ++或MS-Notepad打开它时-希伯来语显示正常。

这意味着文件已正确下载,问题出在MS-Office。

问题是,此CSV用作Excel宏(XLSM)的输入,该宏在夜间自动运行。我发现在Excel中,我可以手动将CSV“导入”到工作表,并且编码很好,希伯来语也可以。我录制了一个宏,VBA现在很好地完成了这项工作。然后,我发现它已在Opening tsv file via Notepad++ and save it in text format

中提及

编辑结束

PHP脚本(注意'SET NAMES utf8'):

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
$username = "XXX";$password ="YYY";$dbname = "ZZZ";
try {
   $conn = new PDO('mysql:host=localhost;dbname='.$dbname, $username, $password);
   $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
   $conn->query('SET NAMES utf8');
   $stmt = $conn->prepare("SELECT comp_id, comp_name FROM companies");
   $stmt->execute();
   $file_export  =  '/home/darushnisayon/public_html/vehadarta/Exported_tables_from_DB/AA_companies.csv';
   $data = fopen($file_export, 'w');
   $csv_fields = array();
   $csv_fields[] = 'comp_id';
   $csv_fields[] = 'comp_name';
   fputcsv($data, $csv_fields);
   while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
       fputcsv($data, $row);
   }
} catch(PDOException $e) {
    echo 'ERROR: ' . $e->getMessage();
}
?>

我的Windows FTP作业(请注意BINARY选项):

    @Echo Off
    Set _FTPServerName=nn.nn.nnn.nnn
    Set _UserName=XXX
    Set _Password=YYY
    Set _LocalFolder=C:\Dropbox\GADI\Vehadarta\Routine_Tasks\T002_Daily_Check_if_Synced
    Set _RemoteFolder=public_html/vehadarta/Exported_tables_from_DB/
    Set _Filename=AA_companies.csv
    Set _ScriptFile=ftp1
    :: Create script
     >"%_ScriptFile%" Echo verbose
    >>"%_ScriptFile%" Echo open %_FTPServerName%
    >>"%_ScriptFile%" Echo %_UserName%
    >>"%_ScriptFile%" Echo %_Password%
    >>"%_ScriptFile%" Echo lcd %_LocalFolder%
    >>"%_ScriptFile%" Echo cd %_RemoteFolder%
    >>"%_ScriptFile%" Echo prompt
    >>"%_ScriptFile%" Echo binary
    >>"%_ScriptFile%" Echo get %_Filename%
    >>"%_ScriptFile%" Echo quit
    :: Run script
    ftp -s:"%_ScriptFile%"
    Del "%_ScriptFile%"

在cPanel上看到的CSV文件:

comp_id,comp_name
1,"קשרי עסקים בע""מ"
2,ASK
3,DCL
4,"אסטרטגיה וליווי עסקי  S.M.C"

FTP后我本地目录中的CSV文件:

comp_id comp_name
1   ׳§׳©׳¨׳™ ׳¢׳¡׳§׳™׳ ׳‘׳¢"׳
2   ASK
3   DCL
4   ׳׳¡׳˜׳¨׳˜׳’׳™׳” ׳•׳׳™׳•׳•׳™ ׳¢׳¡׳§׳™  S.M.C

谢谢你的想法。

1 个答案:

答案 0 :(得分:1)

正如我在 EDIT 中提到的那样,问题出在MS-Office读取CSV的方式上。在记事本中打开文件时,编码正确。由于要将CSV复制到Excel电子表格中,因此我要做的就是将CSV“导入”到Excel中。

非常感谢Martin Prikryl,他为我提供了解决方案的第一个提示。