CSV-файл с неанглийским языком (иврит и т. Д.) - PullRequest
0 голосов
/ 20 января 2019

У меня есть размещенный сайт с доступом к 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

Спасибо за любую идею.

1 Ответ

0 голосов
/ 21 января 2019

Как я уже упоминал в моей РЕДАКТИРОВАТЬ , проблема заключалась в том, как MS-Office читает CSV.При открытии файла в блокноте кодировка правильная.Поскольку CSV должен быть скопирован в электронную таблицу Excel, все, что мне нужно было сделать, это «Импортировать» CSV в Excel.

Большое спасибо Мартину Прикрилу, который дал мне первый совет для решения.

...