Ш̴̴̜̥͍͕̼̙̱͙͎͍̘̀̐̔́̾̃͒̈̔̎́́͜р̧̛̺͖͖̯̖ͧͤ͋̅̽ͧ̈̐̽̆̐͋ͤͦͬ͛̃̑͞͞и̒ͥͤͯ͂ͣ̐̉̑ͫ̉̑҉̛͏̸̻͕͇͚̤͕̯̱̳͉ͅф̴̴̡̟̞͙̙̻͍̦͔̤̞̔̓́̍͗̚͢͞ͅт̨̐ͫ̂͊̄̃ͥͪ͏̫̺͍̞̼͈̩̥̜͔͜͜ы̸̴̱̺̼̠̦͍͍͍̱̖͔̖̱͉̅͑͌͒ͫ͒̀ͥ͐ͤ̅͘̕.̵̴̡̭̼̮͖͈̙͖͖̲̮̬͍͙̼̯̦̮̮ͦ̆̀̑̌ͮͧͣͯ̔̂́͟г͌ͮ̏̈͂ͯ̚҉̛̙̬̘̲̗͇͕̠̙͙̼̩͚̀͘͞ͅо̷̥̯̘̓ͤ̽͒̋̉̀̂̄̒̓̊ͨ͛́̌ͤ̂̀͠в̶̒͒̓̏̓̚҉̛̙̘̺̰̮̼̟̼̥̟̘̠̜͜н̸̷̸̲̝͈͙̰̟̻̟̰̜̟̗͎̻̻͍̿̔̃ͨ͑о̔̀̋ͫ̇̿̐ͫ͌͗ͩ҉̨̜̙̙͈͍̮̮̼̙̘̞̕͜͡ Войти !bnw Сегодня Клубы
Парни, у меня тут какой-то феерический майндфак. Есть такая читалка, CoolReader называется. В ней есть закладки и даже экспорт оных в файл. В коде написано, что файл в UTF-8, но при этом в него пишется BOM для UTF-16 (0xfeff то есть, вместо положенного 0xefbbbf): http://sourceforge.net/p/crengine/crengine/ci/cr3-3.1.2-33/tree/android/src/org/coolreader/crengine/BookInfo.java#l240 (ссылка на код той версии, что собран и работает у меня на Nook). По факту в файле BOM правильный, двухбайтовый. WTF?
#QM4LZU / @minoru / 3732 дня назад

Ты пишешь в поток символ BOM, U+FEFF, и в зависимости от формата выходного файла он, как и все прочие символы, будет храниться в big endian, little endian или UTF-8.

#QM4LZU/VRV / @ceyt / 3732 дня назад
Всё, я понял: java-код по ссылке пишет в поток символ с кодом efff, но т.к. это UTF-8, символ в два байта не умещается и потому на выходе получается efbbbf, что и является представлением BOM для UTF-8. А потом, когда я в другом приложении читаю файл в строку, я снова вижу один символ с кодом efff. Потому-то и получается, что в коде одно значение, а по факту в файле другое.
#QM4LZU/131 / @minoru / 3732 дня назад
@ceyt > в big endian, little endian или UTF-8 Если ты просто плохо выразился, то спасибо. Если нет, и ты действительно думаешь так, как написал, то прочти /131.
#QM4LZU/16D / @minoru --> #QM4LZU/VRV / 3732 дня назад

@minoru Дело не в том, что в два байта не помещается, а в том, что символы, которые в поток пишутся — абстрактный Юникод (который в строке может храниться и как пара двухбайтных суррогатных символов, что при правильной работе со строками тебя волновать не должно), а вот бинарное представление их при записи в файл задаётся параметром в предыдущем вызове.

#QM4LZU/PFD / @ceyt --> #QM4LZU/131 / 3732 дня назад
@ceyt Я ж об этом и говорю: взяли codepoint 0x0000efff, в бинарном представлении (aka кодировке) UTF-8 он в два байта не умещается, поэтому юзаем три. Я знаю за разницу между Unicode и кодировками, его представляющими, но вот про разное представление BOM для меня оказалось открытием.
#QM4LZU/U27 / @minoru --> #QM4LZU/PFD / 3732 дня назад
ipv6 ready BnW для ведрофона BnW на Реформале Викивач Котятки

Цоперайт © 2010-2016 @stiletto.