Включить извлечение и отображение контента на иностранных языках в браузерах с помощью fgetcsv

iD; английский [en]; китайский [zh]; немецкий [de]; хинди [hi]; хинди (TOGO) [hi_TG]; японский [ja] источник [local].AlarmGroup[AlarmText_02].ID[1310:90];Unwinder: слишком большая разница в точности. Проверка на разрыв ламината;Laminatspeicher: Zu grosse Positionsänderung - Auf Laminatriss prüfen;290;; Источник [local].AlarmGroup[AlarmText_02].ID[1311:91]; Разматыватель: уровень Accu слишком мал для автоматического соединения;拆卷器: 自动拼接的 的 的 拼接 的 的 的 拼接 的 的 的 的小;Abwickler: Akku Füllstand zu klein für Autospleiss;291;;巻出装置: 自動紙継を行うに に キュ ュ レ が が ル ル ルが が す す す す す す す

Я пытаюсь получить содержимое CSV, как указано выше:

CSV-файл сохраняется как текст Unicode. Имеет китайский, немецкий, японский язык. Я не могу выбрать иностранный язык в правильном формате.

Код читателя CSV

header('Content-Type: text/html; charset=utf-8');
$row = 1;
$up_file = 'text_SHOT_S.csv';
setlocale(LC_ALL, 'en_US.UTF-8');
if (($handle = fopen($up_file, "r")) !== FALSE) {   
     while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
        $num = count($data);
        $row++;
        for ($c=0; $c < $num; $c++) {
           echo $data[$c].'<br>';
        }
    }
    fclose($handle);}

Вывод следующего кода:

> китайский [ч]]戼 䜀攀爀 愀 愀 搀 搀攀 牢 牢> хинди [привет] hi 㹲䠀椀渀 ⠀吀伀 伀 伀 伀 伀 伀 伀 伀 伀 伀 伀 伀 伀 伀 伀 伀 伀 伀 伀 伀 伀 伀 伀 伀 伀 伀 伀 伀 伀 伀 伀 伀 伀 伀 伀 伀 伀 伀Japanese j ⤀ 嬀栀椀开吀䜀 牢 牢 Japanese Japanese Japanese Japanese Japanese Japanese Japanese Japanese Japanese Japanese Japanese Japanese Japanese Japanese Japanese Japanese Japanese Japanese Japanese Japanese Japanese Japanese 爀 爀 爀 爀> Разматыватель: слишком большая разность положения Accu. Проверка на разрыв ламината ate ats pe 睢桓ᩖ⃿ 桛 桛䵖 읝 ♦ 쀀 쀀൧࡙ ♦ ♦ ♦ 牢 L L L L L L amin 㰀 amin amin amin amin amin amin Au Au Au 牢 牢 牢 牢 牢 牢 牢 牢 牢> ff 艹 앑溈㩿 괰ﰰ뼰 뼰 湏 湏 湏湿 䱝✰ 夰丰 丰 丰 縰 ‰ 촰 豘 豘 豘 豘昰 昰 昰 昰 昰估 唰 㰀 㰀牢 牢 牢>Source[local].AlarmGroup[AlarmText_02].ID[1311:91]戼㹲唀渀眀椀渀搀攀爀 䄀 䄀 氀 氀 攀 攀瘀攀 猀洀愀氀氀 昀 昀 愀 愀 愀 愀拆 漀 猀瀀氀 挀攀 牢 牢 拆 拆 : : : : : 的 的 的 的 的 的 的 的 渀 愀渀 渀 渀 稀 稀 渀29 戼 氀 攀 渀 昀 牢 牢 牢 牢 牢 牢 牢 牢 牢 牢 牢 29 巻 巻 巻 巻 装置 自動 が が が が が が が が が が が㰀牢

Я либо проверяю символ мусора, либо большую часть контента преобразую в китайский. Также попробовал header('Content-Type: text/html; charset=iso-8859-1') а также setlocale(LC_CTYPE, 'zh_CN.UTF-8','zh_ZH.big5');

Я хочу вывод такой же, как контент CSV.

Заранее спасибо.

2 ответа

Решение

Для чтения CSV-контента я использовал PHPExcel и конвертировал файл UTF-16 в UTF-8, после чего он будет правильно загружать китайский контент.

Пожалуйста, обратитесь к ссылке ниже для преобразования файла UTF-16 в UTF-8.

Как конвертировать файл UTF-16 в файл UTF-8 с помощью PHP

Чтобы конвертировать файл просто позвоните convert_file_to_utf8() и передайте ему путь к файлу, который вы хотите преобразовать. Затем функция использует функцию PHP file_get_contents() упаковать содержимое входного файла в строковую переменную, которая затем передается в основную функцию преобразователя, которая при необходимости преобразует строку из кодировки UTF-16 в кодировку UTF-8. Наконец, он использует file_put_contents() вставить полученную строку обратно в исходный файл, переписав исходное содержимое файла.

function utf16_to_utf8($str) {

    $c0 = ord($str[0]);
    $c1 = ord($str[1]);

    if ($c0 == 0xFE && $c1 == 0xFF) {
        $be = true;
    } else if ($c0 == 0xFF && $c1 == 0xFE) {
        $be = false;
    } else {
        return $str;
    }

    $str = substr($str, 2);
    $len = strlen($str);
    $dec = '';
    for ($i = 0; $i < $len; $i += 2) {
        $c = ($be) ? ord($str[$i]) << 8 | ord($str[$i + 1]) :
                ord($str[$i + 1]) << 8 | ord($str[$i]);
        if ($c >= 0x0001 && $c <= 0x007F) {
            $dec .= chr($c);
        } else if ($c > 0x07FF) {
            $dec .= chr(0xE0 | (($c >> 12) & 0x0F));
            $dec .= chr(0x80 | (($c >> 6) & 0x3F));
            $dec .= chr(0x80 | (($c >> 0) & 0x3F));
        } else {
            $dec .= chr(0xC0 | (($c >> 6) & 0x1F));
            $dec .= chr(0x80 | (($c >> 0) & 0x3F));
        }
    }
    return $dec;
}

function convert_file_to_utf8($csvfile) {

    $utfcheck = file_get_contents($csvfile);
    $utfcheck = utf16_to_utf8($utfcheck);
    file_put_contents($csvfile, $utfcheck);
}

Пожалуйста, прежде чем читать этот ответ, прочитайте другой комментарий.

Mudassir, вы можете увидеть точную кодировку с черепахой, с компаратором файла (см. Img) введите описание изображения здесь

Вы используете не кодировку utf-8, а кодировку utf-16. Если вы не можете изменить это, вы можете использовать http://php.net/manual/en/function.mb-convert-encoding.php http://php.net/manual/fr/mbstring.supported-encodings.php

Я попытался с вашим файлом и этой функцией, и она работает правильно. Смотрите код:

header('Content-Type: text/html; charset=utf-8');
$row = 1;
$up_file = 'text_SHOT_S.csv';
setlocale(LC_ALL, 'en_US.UTF-8');
if (($handle = fopen($up_file, "r")) !== FALSE) {   
     while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
        $num = count($data);
        $row++;
        for ($c=0; $c < $num; $c++) {
           // echo $data[$c].'<br>';
           echo mb_convert_encoding($data[$c],'utf8','utf-16').'<br>';
        }
    }
    fclose($handle);}
Другие вопросы по тегам