PHP str_getcsv () не анализирует CSV правильно, если он содержит японский символ - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь преобразовать файл Excel в массив с помощью функции file ().Некоторые поля содержат японский символ.Для этих полей я не получаю правильные данные.

Вот моя строка кода

$data = array_map('str_getcsv', file($path));

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Я решил проблему с помощью

mb_convert_encoding($csv_data[$i][2],"UTF-8", "SJIS");

Это преобразует все символы в кодировке Shift-JIS в UTF-8.

0 голосов
/ 05 февраля 2019

Я могу только догадываться без подробностей, таких как вводимые японские буквы, как неправильно конвертированы.

str_getcsv () видит системный языковой стандарт, поэтому установка японского языкового стандарта может решить проблему.

Этот код

setlocale(LC_ALL, 'ja_JP');
$data = array_map('str_getcsv', file('japanese.csv'));
var_dump($data);

работает со следующим CSV-файлом (japanese.csv, сохраненным в UTF-8) на моем локальном компьютере.

日本語,テスト,ファイル
2行目,CSV形式,エンコードUTF-8

Результаты

array(2) {
  [0]=>
  array(3) {
    [0]=>
    string(9) "日本語"
    [1]=>
    string(9) "テスト"
    [2]=>
    string(12) "ファイル"
  }
  [1]=>
  array(3) {
    [0]=>
    string(7) "2行目"
    [1]=>
    string(9) "CSV形式"
    [2]=>
    string(20) "エンコードUTF-8"
  }
}

Как видите, str_getcsv () требует, чтобы вы знали, какие языки используются во входном CSV-файле.На этот раз вы можете быть уверены, что ввод всегда осуществляется на японском языке, но он не пригоден для анализа CSV, если его язык непредсказуем.Кроме того, вам следует быть осторожным, чтобы указанная локаль могла отсутствовать, если ваш код используется в другой среде.

...