Включить извлечение и отображение контента на иностранных языках в браузерах с помощью 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()
и передайте ему путь к файлу, который вы хотите преобразовать. Затем функция использует функцию PHPfile_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);}