Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

UTF8

30K
29 февраля 2008 года
vinni-medved
19 / / 29.02.2008
Доброго времени суток!

Народ, подскажите, плиз, как можно проверить юникодную строку (WideString) на предмет того, УТФ8 она или нет?

Заранее спасибо!
255
29 февраля 2008 года
Dart Bobr
1.4K / / 09.04.2004
Марш читать что такое юникод и что такое UTF-8!!
Для ленивых вот:
http://ru.wikipedia.org/wiki/UTF-8
http://ru.wikipedia.org/wiki/Юникод

А после прочтения - открой справку Дельфи на тему WideString!!
30K
29 февраля 2008 года
vinni-medved
19 / / 29.02.2008
ну вообще то я все это уже знаю... Что-нибудь конкретнее можеш подсказать?
241
29 февраля 2008 года
Sanila_san
1.6K / / 07.06.2005
Если знаешь всё, в чём проблема тогда? ;)
30K
29 февраля 2008 года
vinni-medved
19 / / 29.02.2008
проблема в том, что не знаю, как проверить УТФ8 или нет :D
1.9K
29 февраля 2008 года
andriano
474 / / 10.01.2008
Юникод и УТФ разные ПРИНЦИПЫ кодировки: юникод - с фиксированной длиной символа, а УТФ - с переменной.Соответственно, одно другим быть никак не может.

Если есть некоторая последовательность байтов и известно, что она является текстом на определенном языке, то единственный путь проверки - частотный анализ.
30K
02 марта 2008 года
vinni-medved
19 / / 29.02.2008
Хорошо, спасибо. А как тогда можно проверить обычную строку (типа String) на то, УТФ-8 она или нет? Если можно, м.б. есть конкретный алгоритм?
6
03 марта 2008 года
George
4.1K / / 05.01.2007
Если я не ошибаюсь, string - это ANSI. И точно не UTF-8. Объясни подробнее, нафига тебе это проверять?
30K
03 марта 2008 года
vinni-medved
19 / / 29.02.2008
Объясняю. Есть анси-стока (String). Если в ней текст в нормальном виде - то отлично, если в УТФ-8 - тогда надо делать Str:=UTF8Decode(Str). Если декодировать НЕ УТФ-8 строку, то получится фигня. Т.е. надо определить УТФ8 она или нет.
1.9K
04 марта 2008 года
andriano
474 / / 10.01.2008
Еще раз.
Помедленнее.
Достоверно определить кодировку фрагмента текста можно только единственным способом - снабдить его заголовком установленного формата, в котором эту кодировку указать явно.
Все остальные методы - вероятностные.
Естественно, вероятностные будут более или меннее хорошо работать только при условии существенных ограничений. В частности, крайне желательно знать, на каком языке эта строка. Тогда самый простой способ - частотный анализ. Вероятность правильного определения увеличивается с увеличением длины строки.
30K
04 марта 2008 года
vinni-medved
19 / / 29.02.2008
То есть однозначно это определить нельзя, тем более, что язык текста неизвестен. Ясно, спасибо.
1.9K
05 марта 2008 года
andriano
474 / / 10.01.2008
Цитата: vinni-medved
То есть однозначно это определить нельзя, тем более, что язык текста неизвестен. Ясно, спасибо.



Более того, можно гарантировать, что текст на английском языке в ANSI и UTF-8 будет выглядеть идентично. Т.е. на подмножестве латинского алфавита эти кодировки совпадают. Ради чего, собственно, это и сделали.

37K
05 марта 2008 года
vljak
2 / / 05.03.2008
http://ru.wikipedia.org/wiki/UTF-8

не понимаю, по этой ссылке уже можно составить простенький сканер, возвращает не УТФ, совместимо с УТФ и УТФ:
пусть у тебя последовательность байт и она является строкой.
По каждому байту, если значение < 127 - совместимо, след.; иначе если в $80 — $7FF : if (бaйт & $1F) = $C0 то следующий байт & $3F должен быть = $80 иначе не УТФ
и т.д.
т.е. идея ясна: сама кодировка строки в утф8 позволит тебе проверить ее совместимость. если сканер найдет хоть малейшее расхождение то это срока не в утф а иначе она скорее всего в утф - не забывай, что в ней могут быть не только буквы, но и символы и знаки, я уже молчу что строка может быть на редком языке... а такой подход гарантирует что последовательность байт может быть декодирована как утф8
ясно что обычная строка на английском языке в ANSI будет совместима, русская не утф на какой-то букве прервет сканер на несовместимости, если она конечно не составлена специальным образом... но как ты ставишь условие задачи таких строк на входе нет по определению, есть нормальные слова а не наборы букв
255
05 марта 2008 года
Dart Bobr
1.4K / / 09.04.2004
[offtop]
Почему ж браузеры не всегда удачно подбирают кодировки автоматически? Почему они дают возможность пользователю "потрахаться" с кодировкой? Если все оказывается так просто. Тут точно заговор!! :D
[/offtop]
6
05 марта 2008 года
George
4.1K / / 05.01.2007
Короче "однозначно это определить нельзя"
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог