Автор Тема: Utf8 файлове без bom.  (Прочетена 2242 пъти)

marintodorov

  • Напреднали
  • *****
  • Публикации: 25
    • Профил
Utf8 файлове без bom.
« -: May 31, 2007, 11:47 »
Здравейте,
Имам следния проблем.

Написах текстов Readme файл (под Линукс), давам го на други хора (също под Линукс, но с различни от моята дистрибуции), но те не могат да го четат. Излизат им само ченгелчета.

Аз съм с официалната Мандрива 2007.1 и Ffce4.4 (ползвам Mousepad който идва с Ffce4.4).

Порових се и разбрах че проблема ми е следният:
UTF8 файла има 3 байта в началото. Така наречения BOM (Byte Order Mask). Именно това му казва, че е UTF, а ако няма, значи е ANSI файл.

Моя Readme файл няма такива байтове и следователно е ANSI файл, което напрактика е UTF8, но без BOM (без първите три байта).
Чета че добрите редактори ги разпознават тия неща. Явно аз съм с добър редактор както за Linux (Mousepad, KWrite) така и за Windows (Notepad++) и затова нямам ядове.
Но явно има редактори които ако не открият BOM байтовете и не се сещат, че това е UTF8 но без BOM и показват ченгелчета.


Въпросът ми е следния. Какво да правя? Кое е по-правилно - да си оставя настройките каквито са ми в момента т.е. всичките ми текстови редактори да създават файлове без BOM или да пипна някъде и да направя така, че текстовите ми редактори винаги да слагат BOM?
Ако е второто - къде трябва да пипна, че да укажа винаги да се слага BOM?
Ако е първото (нищо да не правя), как ще реша проблема с това, че други хора няма да могат да ми четат файловете? Не мога да казвам на всички, че това е UTF8 без BOM.

И друг въпрос - опитвам се да направя проста интернер страница. Какви трябва да са ми html файловете че да няма проблеми на други компютри - UTF8 с BOM или UTF8 без BOM?
Активен

Hapkoc

  • Напреднали
  • *****
  • Публикации: 2117
    • Профил
Utf8 файлове без bom.
« Отговор #1 -: May 31, 2007, 12:38 »
http://unicode.org/faq/utf_bom.html#General

Има една табличка, според която UTF8 няма BOM, за разлика от UTF16 и UTF32. Досега не съм имал проблеми с писане на документи в UTF8 и последващото им разчитане.

М/у другото какви са настройките на локала ти (командата locale какво изплюва)?
Активен

paucku

  • Напреднали
  • *****
  • Публикации: 638
  • Distribution: Kubuntu LTS (отскоро е - тествам я в момента)
  • Window Manager: KDE
  • Райчо Николов
    • Профил
    • WWW
Utf8 файлове без bom.
« Отговор #2 -: May 31, 2007, 12:45 »
За пръв път чувам за BOM. Би ли дал повече информация?

Доколкото знам, UTF8 файловете използват по два байта за кодиране на символите, докато ASCII използва само един байт за символ. На мен ми изглежда да си го записал в друга кодова таблица. Отвори файла в браузър и сменяй енкодинга и виж при кой от тях текстът се чете.

Какъв беше енкодинга когато писа текста? Има ли опция за смяната му в самия редактор? Ако енкодинга е бил западен, а пишеш на кирилица, само мога да си представям, какви чудесии са се сътворили.

Аз ползвам Kate и съм много доволен. Можеш да си го настроиш по подразбиране в какъв енкодинг да записваш файла и дали новият ред да е Windows-ки или Linux-ки.
Активен

marintodorov

  • Напреднали
  • *****
  • Публикации: 25
    • Профил
Utf8 файлове без bom.
« Отговор #3 -: Jun 01, 2007, 12:03 »
Разбрах какво е BOM от този форум (там обсъждат друг проблем, но няма значение).

Прилагам два файла с еднакво съдържание, но единя е с BOM, а другия без BOM: TextWithBOM и TextWithoutBOM

Самия BOM са три байта в началото - ef bb bf (239 187 191).

Искам пак да кажа, че при мен няма никакви проблеми с четенето както на файлове с BOM така и без BOM.
Проблема е при други компютри с инсталиран Slax и то май последна версия. Там файлове с BOM се четат, а без BOM не се четат.

Настройката както при мен така и при другите е UTF-8 с UNIX-ки край на ред.

Това е моят locale:
Примерен код
[marin@localhost ~]$ locale
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LC_NUMERIC=bg_BG.UTF-8
LC_TIME=en_US.UTF-8
LC_COLLATE=en_US.UTF-8
LC_MONETARY=bg_BG.UTF-8
LC_MESSAGES=en_US.UTF-8
LC_PAPER=bg_BG.UTF-8
LC_NAME=bg_BG.UTF-8
LC_ADDRESS=bg_BG.UTF-8
LC_TELEPHONE=bg_BG.UTF-8
LC_MEASUREMENT=bg_BG.UTF-8
LC_IDENTIFICATION=bg_BG.UTF-8
LC_ALL=


Когато отварям горните два файла в линукс при мен се четат, а кодировката и за двата е UTF-8. Когато ги отварям под Уиндоус с Notepad++ пак се четат, но този дето е с BOM го разпознава като UTF-8 (снимка), а този без BOM го разпознава като ANSI файл без BOM (снимка).

Не знам дали само при мен е така (на Мандривата), но по подразбиране всичките ми файлове се създават като UTF-8 без BOM. Нормално ли е това? Защото на Slax-а не се четат. А ако ги направя да са с BOM се четат и на Slax-а.

Аз ли трябва да си променя настройките или тези дето не ми четат файла?
При вас какви са настройките? Имате ли BOM?
Активен

Hapkoc

  • Напреднали
  • *****
  • Публикации: 2117
    • Профил
Utf8 файлове без bom.
« Отговор #4 -: Jun 01, 2007, 12:29 »
И двата файла се четат. Във vim този с BOM му се вижда BOM-а, в gedit не се вижда, но и двата си излизат без проблем.

Аз сега научавам за тоя BOM и досега определено не съм срещал такива файлове, нито тези, които съм създавал, са имали.
Активен

paucku

  • Напреднали
  • *****
  • Публикации: 638
  • Distribution: Kubuntu LTS (отскоро е - тествам я в момента)
  • Window Manager: KDE
  • Райчо Николов
    • Профил
    • WWW
Utf8 файлове без bom.
« Отговор #5 -: Jun 01, 2007, 13:01 »
Отворих твата файла с Firefox. Този с BOM се четеше, а за другия трябваше да сменя енкодинга (т.е. и двата стават). Според мен това е решение — човека да чете файловете с браузър — би трябвало да успее при всички положения.

Направо може да направиш файловете в HTML формат — тогава енкодинга е зададен във файла (което изглежда прави и този BOM, само че в бинарен вид).



Активен

marintodorov

  • Напреднали
  • *****
  • Публикации: 25
    • Профил
Utf8 файлове без bom.
« Отговор #6 -: Jun 01, 2007, 14:02 »
Цитат (paucku @ Юни 01 2007,14:01)
Направо може да направиш файловете в HTML формат — тогава енкодинга е зададен във файла (което изглежда прави и този BOM, само че в бинарен вид).

Не искам да правя файловете html защото ми се струва направо абсурдно някой да не може да прочете един обикновен текстов файл. Аз се бях притеснил, че никой не може да ги прочете и помислих, че проблема е при мен, но щом вие ги четете явно проблема е само при тях.

Мъчи ме само въпроса за какво въобще е този BOM щом в Линукса не се ползва - да не е някоя бозаджииска измишльотина? Но факт е, че с BOM се отварят и на ония компютри..

Много проста проверка дали един текстов редактор слага BOM или не, е да се създаде празен файл, да се запишат десет български букви без ентер на края и да се запише.
Ако големината на файла е 20 байта - значи няма BOM. Ако е 23 байта значи има.
Активен

paucku

  • Напреднали
  • *****
  • Публикации: 638
  • Distribution: Kubuntu LTS (отскоро е - тествам я в момента)
  • Window Manager: KDE
  • Райчо Николов
    • Профил
    • WWW
Utf8 файлове без bom.
« Отговор #7 -: Jun 01, 2007, 15:44 »
Kate не слага BOM.

Може би BOM е нещо като да зададеш енкодинг в HTML, само че тук е за текстов файл.
Активен