У меня есть размещенный сайт с доступом к cPanel, где у меня есть ежедневная работа cron, выполняющая скрипт PHP.Этот скрипт экспортирует таблицу MySQL в CSV.Затем у меня есть запланированная работа на моей Windows здесь в офисе, которая передает этот CSV на мою локальную машину.Все идет нормально.
Но в таблице MySQL смешаны данные на английском и иврите.Через FileManager cPanel я правильно вижу иврит в созданном CSV, но после передачи его на мою локальную машину иврит не читается.
РЕДАКТИРОВАТЬ:
При открытии загруженного CSV в Office-2016 проблема не устранена.При открытии его с помощью Notepad ++ или MS-Notepad - иврит выглядит нормально.
Это означает, что файл загружен правильно и проблема лежит в MS-Office.
Дело в том, что этоCSV должен использоваться в качестве входных данных для макроса Excel (XLSM), который запускается автоматически по ночам.Я обнаружил, что в Excel я могу вручную «импортировать» CSV на лист, и кодировка в порядке, и иврит в порядке.Я записал макрос, и VBA теперь отлично справляется со своей задачей.Затем я обнаружил, что это уже упоминалось в Открытие TSV-файла с помощью Notepad ++ и сохранение его в текстовом формате
КОНЕЦ РЕДАКТИРОВАНИЯ
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();
}
?>
Мое задание FTP для Windows (обратите внимание на параметр 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%"
Файл CSV, видимый на cPanel:
comp_id,comp_name
1,"קשרי עסקים בע""מ"
2,ASK
3,DCL
4,"אסטרטגיה וליווי עסקי S.M.C"
Файл CSV в моем локальном каталоге после FTP:
comp_id comp_name
1 ׳§׳©׳¨׳™ ׳¢׳¡׳§׳™׳ ׳‘׳¢"׳
2 ASK
3 DCL
4 ׳׳¡׳˜׳¨׳˜׳’׳™׳” ׳•׳׳™׳•׳•׳™ ׳¢׳¡׳§׳™ S.M.C
Спасибо за любую идею.