Доступ к заголовку файла

Sanja

Новичок
Доступ к заголовку файла

Открыв файл в кодировке UTF-8 с одним только символом "а" в UltraEdit в HEX- mod увидим такое содержимое:
00000000h: FF FE 61 00 ;яюa.

FF и FE могут служить для оределения является ли файл в Unicode(UTF-8).
Можно ли как-то из скрипта получить доступ к этому заголовку файла?
 

SiMM

Новичок
http://ru.wikipedia.org/wiki/Unicode
Читать всё в целом и про BOM в частности

> FF и FE могут служить для оределения является ли файл в Unicode(UTF-8).
С определённой степенью вероятности.
 

Sanja

Новичок
Автор оригинала: tony2001
точно так же, как и ко всем остальным частям файла.
PHP:
$f=fopen('./test.txt','rb');
$read=fread($f,3);
fclose($f);
не получим заголовок только текстовое содержимое файла.
 

SiMM

Новичок
> не получим заголовок только текстовое содержимое файла.
А яю по твоему что - не заголовок?
 

Sanja

Новичок
Автор оригинала: SiMM
А яю по твоему что - не заголовок?
Так яю тоже не получим.Получим только a, тот текст который есть в файле и не является желанным:)) заголовком.
 

fog

Рыцарь Джедай
что и "так тоже"? :) какую длинну показывает?
 

Sanja

Новичок
Сколько символов в файле такую и показывает. Так как у меня в примере 1 символ "а" соответственно результат
PHP:
echo strlen($read);
равен 1.
 

SiMM

Новичок
> Так как у меня в примере 1 символ "а"
У тебя в примере ТРИ символа. Как бы фантастично это для тебя не звучало. Если конечно твой файл в файловой системе не имеет длину меньше 3х байт.
Та чушь, которую ты сейчас сказал, эквивалентна утверждению, что
PHP:
<?=strlen("\xFF\xFE\x61")?>
выдаёт 1. А это не так.
 

Gorath

Новичок
Sanja
Специально для тебя взял и проверил. SiMM, естественно, прав.
Ищи ошибки в твоем скрипте.
 

Sanja

Новичок
Так говорится в самом начале темы.

> с одним только символом "а" в UltraEdit в HEX- mod

А символы яю и FF Fe (расположение младшего и старшего байта) видны, когда кодировка UTF-8 и открываешь в Ultraedit в Hex-mod. К ним то мне и нужно добратся.


P.S. Прежде чем говорить, что кто-то несет чушь ,возможно стоит задуматся, а прав ли я сам.
 

SiMM

Новичок
> Прежде чем говорить, что кто-то несет чушь ,возможно стоит задуматся, а прав ли я сам
Было бы не плохо, если свои рекомендации вы в первую очередь применяли к себе.
Файл - это всего лишь последовательность байтов. И ему по барабану, в какой кодировке в нём эти данные записаны. Он вообще понятия не имеет о кодировках. Он хранит БАЙТЫ. Так же ему по барабану на то, чем вы его просматриваете - что показывает или что скрывает этот просмотрщик - целиком и полностью на его совести.

-~{}~ 18.11.05 22:10:

Ага. И кстати таки вы берётесь утверждать, что
PHP:
<?=strlen("\xFF\xFE\x61")?>
выводит 1? Тогда я позволю себе повторить - это чушь.
 

Profic

just Profic (PHP5 BetaTeam)
Sanja
E:\>type test15.txt
а
E:\>type test15.php
PHP:
<?php
$str = file_get_contents('test15.txt');
for($i = 0; $i < strlen($str); ++$i) {
        printf("%1\$x %1\$d %1\$c\n", ord($str[$i]));
}
?>
E:\>php test15.php
ff 255 я
fe 254 ю
30 48 0
4 4 

E:\>
Вопросы?
Следует также заметить, что это НЕ UTF-8, а что-то вроде UTF-16LE.
 

Sanja

Новичок
Profic
Спасибо !

SIMM
И кстати таки вы берётесь утверждать, что
<?=strlen("\xFF\xFE\x61")?>
выводит 1?

я этого и не утверждал.
 

SiMM

Новичок
> я этого и не утверждал.
А чем отличается этот код от вашего, если убрать fread($f,3) - ведь из файла получаются именно эти данные.
Вообще-то когда дают код - надо хотя бы его пробовать. А не утверждать, что он возвращает 1, как вы это сделали здесь. Врать по крайней мере - не хорошо ;)
 
Сверху