Напишите файл с кодировкой UTF-8 в php - PullRequest
1 голос
/ 08 июля 2011

PS: Это не дублированный вопрос, потому что я не хочу записывать содержимое в файл, потому что это уже сделано, я ищу, чтобы изменить тип файла на UTF-8,в этом есть разница.

Как генерировать файл UTF-8, а не ANSI.(Не содержимое).

Например, в большинстве IDE есть опция кодировки, где вы можете изменить тип вашего файла, но я генерирую массив из своей базы данных, и он генерируетмного отдельных текстовых файлов, но целые файлы по умолчанию ANSI .. Я просто ищу функцию в php, которая позволяет изменить кодировку, прежде чем он генерирует объем.

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

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

РЕДАКТИРОВАНИЕ

Следуйте распечатке того, что я спрашиваю здесь.

enter image description here

Когда я генерирую файл "testecli01.csv", он всегда получает кодировку ANSI, что бы я ни делал в своем скрипте, это всегда ANSI, и мне нужно в UTF-8, просто это.Это просто, но я понятия не имею, как это сделать.

Ответы [ 4 ]

4 голосов
/ 11 июля 2011

Если ваша сторонняя программа "не поддерживает файлы в ANSI, но в UTF-8", как вы упомянули в комментарии, то, скорее всего, она ожидает BOM .

Хотя стандарт Unicode разрешает использование спецификации в UTF-8, [2] он не позволяет требовать или рекомендовать его. [3] Порядок байтов не имеет значения в UTF-8 [4], поэтому Спецификация служит только для идентификации текстового потока или файла как UTF-8.

причина BOM рекомендуется против того, что он побеждает ASCII Обратная совместимость, которая является частью дизайна UTF-8.

Строго говоря, ваша сторонняя программа не полностью соответствует стандарту, потому что спецификация должна быть необязательной. ANSI является на 100% действительным UTF-8, и это один из основных драйверов этого. Все, что может понять UTF-8 согласно стандарту по определению, также понимает ANSI.

Попробуйте написать "\xEF\xBB\xBF" в начале файла и посмотреть, решит ли это вашу проблему.

1 голос
/ 08 июля 2011

Я не знаю базы данных, которая будет легко выполнять преобразование кодировки.Например, в MySQL вы должны сбросить все кодировки символов для БД, таблиц и столбцов, И ТОГДА преобразовать данные.

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

iconv -f original_charset -t utf-8 dumpTextData > convertedTextData

или в PHP (взято из Как записать файл в формате UTF-8? )

$input = fopen($file, 'r');
$output = fopen($file, 'w');
stream_filter_append($input, 'convert.iconv.UTF-8/OLD-ENCODING');
stream_copy_to_stream($input, $output);
fclose($input);
fclose($output);

ПРИМЕЧАНИЕ: отредактировано, чтобы избежать утечки файловых дескрипторов.

0 голосов
/ 12 декабря 2016

Сначала используется старая кодировка, как и в функции iconv.Вы также не можете читать и писать один и тот же файл.

    $input = fopen($path, 'r');
    $output = fopen($path . '.tmp', 'w');
    stream_filter_append($input, 'convert.iconv.OLDENCODING/UTF-8');
    stream_copy_to_stream($input, $output);
    fclose($input);
    fclose($output);
    unlink($path);
    rename($path . '.tmp', $path);
0 голосов
/ 15 июля 2012

Excel любит, чтобы CSV-файлы были UTF-16LE, и начинаются с '\xFF\xFE'.

Мой код для создания файла для Excel:

echo "\xFF\xFE"; // marker for UTF-16 file;

foreach ($rows as $row)
    echo mb_convert_encoding($row, 'UTF-16LE');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...