我有一个可以访问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
谢谢你的想法。
答案 0 :(得分:1)
正如我在 EDIT 中提到的那样,问题出在MS-Office读取CSV的方式上。在记事本中打开文件时,编码正确。由于要将CSV复制到Excel电子表格中,因此我要做的就是将CSV“导入”到Excel中。
非常感谢Martin Prikryl,他为我提供了解决方案的第一个提示。