1

Тема: VBS: Определение кодировки текста

Приветствую, Коллеги.
Каким образом определить кодировку текста?

Задача перекодировать строку взятую из файла в cp1251, но для того чтобы это сделать нужно знать изначальную кодировку (в ADO например).
Какие идеи?
Может кто знает как текстовые редакторы определяют кодировку файлов?
С юникодом всё достаточно просто - 0xFE,0xFF в начале файла.
Но как быть с UTF8?

2

Re: VBS: Определение кодировки текста

С утф вполне можно определить, что текст не утф
руководствуясь к примеру википедией
http://ru.wikipedia.org/wiki/UTF-8

первые две таблицы

Я конечно далек от мысли... (с)

3 (изменено: mozers, 2012-02-11 18:27:14)

Re: VBS: Определение кодировки текста

Определить произвольную, имхо, в принципе невозможно. Выбрать правильную из нескольких вариантов - другое дело. Какие варианты возможны?
Я обычно поступаю достаточно примитивно, анализируя первую сотню байт, прочитанных из файла. Вот 2 варианта:

var codepage = (/Р.Р.Р./.test(text)) ? 'utf-8' : 'windows-1251';
var codepage = (/[\x208\x209][\x128-\x191][\x208\x209][\x128-\x191]/.test(text)) ? 'utf-8' : 'windows-1251'; // то же, но чуть точнее
var codepage = (/[\x80-\xA6\xAC-\xB7\xBC-\xBF]/.test(text)) ? 'cp866' : 'windows-1251';

Кстати, очень редко ошибается.

4

Re: VBS: Определение кодировки текста

Спасибо за отклики.

mozers пишет:

Определить произвольную, имхо, в принципе невозможно.

Ну а как же это делает тот же notepad?
Надо бы его поковырять под микроскопом...

Почитал Интернет, однозначного мало.
Есть мнение что механизм определения завязан на анализе частоты вхождений определённых байт. Для каждой кодировки она своя.

2mozers, спасибо за пример!
Я так понимаю это и есть то что надо.
Разъясните если не трудно алгоритм, как происходит анализ?

5

Re: VBS: Определение кодировки текста

WScript.Echo((/[\xd0\xd1][\x80-\xbf][\xd0\xd1][\x80-\xbf]/).test('\x1FFFFF'))
Я конечно далек от мысли... (с)

6

Re: VBS: Определение кодировки текста

Аскет пишет:

Разъясните если не трудно алгоритм, как происходит анализ?

Просто если в тексте найдены 2-3 идущие подряд русских буквы (а в utf-8 они представлены 2 байтами. Первый с кодом 208 или 209, а второй с кодом от 128 до 191) то это - текст utf-8.

7

Re: VBS: Определение кодировки текста

Здравствуйте! Помогите пожалуйста с определением кодировки
Например сайты http://rutune.com/business.asp?a=61  или http://www.referatfrom.ru/watch/523/1.html - наименования разделов показаны нормально, а сам текст статьи - непонятные символы. Спасибо

8

Re: VBS: Определение кодировки текста

анализируя первую сотню байт

Самый лучший редактор Акелла распознаёт примерно 50 кодировок и использует для этого 1000 байт, и в настройках это число можно увеличить если что то неуверенно определяется.
У редактора есть форум и пишет его русский программист.

Кстати, очень редко ошибается.

Просто увеличить объём.

9

Re: VBS: Определение кодировки текста

mozers пишет:

Просто если в тексте найдены 2-3 идущие подряд русских буквы (а в utf-8 они представлены 2 байтами. Первый с кодом 208 или 209, а второй с кодом от 128 до 191) то это - текст utf-8.

Спасибо, идея ясна.