Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: В чём отличие кодировок UTF-8 без BOM и просто UTF-8 ?
 
 автор: sasha1133   (11.02.2010 в 02:27)   письмо автору
 
 

Если не ошибаюсь, UTF-8 без BOM это кодировка, в которой каждому символу соответствует 1 байт. А просто UTF-8 тоже самое только в начале файла идут символы ef bb bf (в HEX)
Я всё правильно понял? Какой из них лучше использовать когда сохраняешь файлы?

И ещё. Что значит строчка в статус-баре Notepad++"ANSI AS UTF-8"? Это когда выбираешь кодировку "UTF-8 без BOM"

  Ответить  
 
 автор: elenaki   (11.02.2010 в 19:59)   письмо автору
 
   для: sasha1133   (11.02.2010 в 02:27)
 

без BOM.
если сохраните с ним, то на файлах, где есть сессии или заголовки, будет ошибка.

  Ответить  
 
 автор: heed   (11.02.2010 в 20:58)   письмо автору
 
   для: sasha1133   (11.02.2010 в 02:27)
 

Если написать в utf-8 файл в 3 символа, русский пробел и английский
'З Z'
покажет без BOM
d0 97 20 5a
а с ним
ef bb bf d0 97 20 5a
т.е. два байта там только первая буква, bom это три байта

причём если набрать в строке "Выполнить" charmap
, выбрать юникод-шрифт, например "Arial"
, то символ З там записан как U+0417 Cirrilic Capital Letter Ze
а Z как U+005a Latin Capital Letter Z

т.е. чтобы файл не весил в два раза больше, из юникода сделали utf-8,
но я что-то не понял зачем сделали d097 из 0417, просто лень лезть искать чего почитать, из-за какой-то мелочи ,)

  Ответить  
 
 автор: Саня   (11.02.2010 в 23:40)   письмо автору
 
   для: sasha1133   (11.02.2010 в 02:27)
 

BOM актуален только для UTF-16 и UTF-32. В UTF-8 вообще нет такого понятия как BOM.

  Ответить  
 
 автор: sasha1133   (12.02.2010 в 01:30)   письмо автору
 
   для: Саня   (11.02.2010 в 23:40)
 

В notepad++ есть UTF-8 с BOM и без.

  Ответить  
 
 автор: Саня   (12.02.2010 в 07:17)   письмо автору
 
   для: sasha1133   (12.02.2010 в 01:30)
 

И что?

  Ответить  
 
 автор: sasha1133   (12.02.2010 в 12:32)   письмо автору
 
   для: Саня   (12.02.2010 в 07:17)
 

То что судя по всему в UTF-8 есть такое понятие как BOM. Вот попробовал сохранить русский текст с помощью notepad++ в кодировке UTF-8 без BOM - размер файла в байтах равен количеству символов (1 байт - 1 символ). Потом тот же текст просто в UTF-8 - получился файл на 3 байта больше, т.е. в начало файла добавился этот BOM, разве нет?

  Ответить  
 
 автор: Trianon   (12.02.2010 в 12:58)   письмо автору
 
   для: sasha1133   (12.02.2010 в 12:32)
 

Понятием BOM является символ Byte Order Mark из набора UNICODE (а значит он есть в любых Unicode Transformation Formats - не важно 8-ми , 16-и или 32-разрядных.)
Другое дело, что всё же - применительно к www - кодировку UTF-8 стараются использовать по умолчанию, без этого символа (поскольку он мешает php-обработке). На этом, видимо, Саня и хотел сделать акцент.
Сам по себе этот символ никакой значимой информации (помимо того, что по его байтовому представлению можно опознать конкретную форму UNICODE) не несет.

  Ответить  
 
 автор: Саня   (12.02.2010 в 13:13)   письмо автору
 
   для: sasha1133   (12.02.2010 в 12:32)
 

Нужно смотреть не на то, что написано в редакторе, а на то, что написано в стандарте.
BOM = Byte Order Mark = метка порядка следования байтов. Стандарт не определяет порядок следования байтов в UTF-8.
Поэтому три символа в начале файла с кодами EF BB BF нельзя считать BOM. На самом деле эта сигнатура обозначает, что дальше идёт текст в формате UTF-8.

> размер файла в байтах равен количеству символов (1 байт - 1 символ)
Это верно только для символов с кодом менее 128.

  Ответить  
 
 автор: Trianon   (12.02.2010 в 13:22)   письмо автору
 
   для: Саня   (12.02.2010 в 13:13)
 

В UTF-8 порядок следования байтов определен, (равно как и порядок следования бит в кодовых позициях байтов) и определен весьма жестко.
В начале файла нет трех символов с кодами EF BB BF
В начале файла есть три байта EF BB BF, представляющие один символ - Byte Order Mark (0...0FEFFu).

  Ответить  
 
 автор: sasha1133   (13.02.2010 в 02:49)   письмо автору
 
   для: Trianon   (12.02.2010 в 13:22)
 

>Это верно только для символов с кодом менее 128.

Ну пожалуй соглашусь, только что замутил файл который состоял из 94 символов и весил 188 байт без БОМ и 191 с БОМ.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования