Сейчас на форуме: _MBK_, tyns777, UniSoft (+11 невидимых)

 eXeL@B —› Программирование —› utf-16 recognition
Посл.ответ Сообщение


Ранг: 199.6 (ветеран), 12thx
Активность: 0.10
Статус: Участник
www.uinc.ru

Создано: 11 июля 2012 08:10
· Личное сообщение · #1

посоны, а есть какой-то способ отличить сабж от бинарного мусора?
вот например для utf-8 это можно сделать довольно легко - там после первого ключевого байта всегда должны идти символы с 10хххххх битами. А для юникода?
Предположим даже, что есть BOM маркер, но 2 байта это как-то маловато. Может по статистике как-то? там же явно должен быть один и тот-же язык + примеси ANSI символов. Не?



Ранг: 85.4 (постоянный), 51thx
Активность: 0.090
Статус: Участник

Создано: 11 июля 2012 08:33 · Поправил: drone
· Личное сообщение · #2

http://code.logos.com/blog/2010/05/detecting_the_character_encoding_of_a_file.html
https://github.com/LogosBible/Logos.Utility/blob/master/src/Logos.Utility/IO/StreamUtility.cs

не?

ps. MLang от m$, правда хз
http://msdn.microsoft.com/en-us/library/aa767865.aspx



Ранг: 4.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 11 июля 2012 11:21 · Поправил: MNV
· Личное сообщение · #3

DrGolova пишет:
там же явно должен быть один и тот-же язык + примеси ANSI символов. Не?


Не. Легко может оказаться несколько. И BOM не обязательно 2 байта однако и символы с 10хххххх битами не обязательно UTF-8.
http://www.unicode.org/faq/utf_bom.html



Ранг: 58.0 (постоянный), 13thx
Активность: 0.020.01
Статус: Участник

Создано: 12 июля 2012 03:39
· Личное сообщение · #4

1. старший байт (второй в случае Little Endian) обычно повторяется, или хотя бы из близкого диапазона (English = 00, Cyrillic = 04), ну это если не учитывать CJK...
2. codepoints из диапазона D800-DFFF могут встречаться только парами (surrogate pairs).




Ранг: 199.6 (ветеран), 12thx
Активность: 0.10
Статус: Участник
www.uinc.ru

Создано: 13 июля 2012 05:51
· Личное сообщение · #5

> 1. старший байт (второй в случае Little Endian) обычно повторяется, или хотя бы из близкого диапазона
> (English = 00, Cyrillic = 04), ну это если не учитывать CJK...
> 2. codepoints из диапазона D800-DFFF могут встречаться только парами (surrogate pairs).

Ну да, я как-то так примерно и сделал. 16-ти битные картинки на ура проходят такую эвристику, помогает смотреть количество одинаковых вордов подряд =)




Ранг: 568.2 (!), 465thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 13 июля 2012 09:52
· Личное сообщение · #6

--> unicode.org <--
--> site.icu-project.org <-- не?

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.



 eXeL@B —› Программирование —› utf-16 recognition
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати