В PHP, когда я использую fwrite, я не получаю правильный набор символов

Вот мой код:

<?php header("Content-Type: text/html; charset=UTF-8"); header("Content-Type: application/x-javascript; charset=UTF-8"); $fName = "demo.txt"; $str = "óé"; fid = fopen($fName, 'wb') or die("can't open file"); // Open file fwrite($fid, $str); // Write to file fclose($fid); // Close file ?> 

На экран выводится:

 óéü 

Когда я открываю файл, я получаю:

 óéü 

Я пытаюсь сохранить большие объемы данных с помощью fwrite, но символы не кодируются правильно в точке сохранения файла.

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

fwrite хранит строки двоичные. Он не выполняет конвертацию кодировки. Скорее всего, ваш PHP-скрипт находится в неправильной кодировке и, таким образом, исходная строка "óéü" . Покажите нам bin2hex($str) и bin2hex(file_get_contents('demo.txt')) если вы не можете самостоятельно его отладить.

Существуют некоторые общие варианты решения таких проблем:

  • С помощью utf8_encode($str) перед сохранением.
  • Запись спецификации UTF-8 в выходной файл сначала fwrite($f, "\xEF\xBB\xBF")
  • правильное преобразование с помощью iconv()
  • или адаптировать сам скрипт php с помощью recode L1..UTF8 script.php

какую программу вы используете для «открытия» файла? эта программа может быть проблемой.

Сначала вставьте utf_encode внутри fwrite, например:

 <?php $fName = "demo.txt"; $str = "óé"; fid = fopen($fName, 'wb') or die("can't open file"); // Open file fwrite($fid, utf_encode($str)); // Write to file fclose($fid); // Close file ?> 

Затем не забудьте сохранить свой PHP-скрипт с UTF-8 without BOM кодировки UTF-8 without BOM . Для этого используйте любой расширенный редактор кода, например Notepad ++.