PHP str_getcsv () не анализирует CSV правильно, если он содержит японский символ

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

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

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

1

Решение

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

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, если его язык непредсказуем. Кроме того, вам нужно быть осторожным, чтобы указанная локаль могла отсутствовать, если ваш код используется в другой среде.

2

Другие решения

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

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

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

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector