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

CSV file with non-English (Hebrew etc.)

我有一个可以访问 cPanel 的托管站点,我每天都有一个 cron 作业执行 PHP 脚本。此脚本将 MySQL table 导出到 CSV。然后,我在办公室的 Windows 上安排了一份工作,将此 CSV FTP 发送到我的本地计算机。到目前为止,一切都很好。

但是 MySQL table 中混合了英语和希伯来语数据。通过 cPanel 的文件管理器,我在创建的 CSV 中正确地看到了希伯来语,但是在 FTP 将它发送到我的本地机器之后,希伯来语是不可读的。

编辑:

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

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

问题在于,此 CSV 将用作每晚自动运行的 Excel 宏 (XLSM) 的输入。我发现在 Excel 中我可以手动 "Import" 将 CSV 转换为 sheet 并且编码很好,希伯来语也可以。我录制了一个宏,VBA 现在可以很好地完成这项工作。然后我发现它已经在

中提到了

编辑结束

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

谢谢你的想法。

正如我在 EDIT 中提到的,问题在于 MS-Office 读取 CSV 的方式。在记事本中打开文件时,编码是正确的。由于要将 CSV 复制到 Excel 电子表格中,我所要做的就是将 CSV 'Import' 复制到 Excel.

非常感谢 Martin Prikryl 给了我解决方案的第一个提示。