кодировка DOS

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
NicSoft
Обычный пользователь
Обычный пользователь
 
Сообщения: 80
Зарегистрирован: 05.04.2003 (Сб) 18:51
Откуда: Егорьевск

кодировка DOS

Сообщение NicSoft » 28.01.2004 (Ср) 14:24

Имеются строковые переменные, в которых символы в кодировке DOS. Как программно конвертировать их в WIN? Видел в этом форуме WIN в DOS, мне бы соответственно наоборот. И можно ли определить кодировку символов в переменной, если заведомо она не известна?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 28.01.2004 (Ср) 15:19

Методика такова. Берешь первые N символов строки (N=100...2000) и проводишь анализ, определяя (в процентах) частоту каждого символа. Для каждой кодовой страницы характерен свой "частотный рисунок".
Lasciate ogni speranza, voi ch'entrate.

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

ANSIDETECT

Сообщение hCORe » 28.01.2004 (Ср) 21:10

Используй вот эту функцию, передавая ей текст для проверки в качестве параметра. Она возвращает True, если текст Win1251 и False, если Dos866.

Код: Выделить всё
Private Function ANSIDETECT(Txt As String) As Boolean
'пpовеpяем тип кодиpовки ANSI или ASCII
'беpем пеpвые 1000 байт еcли это возможно. Hевозможно - меньше.
    l& = Len(Txt)
    If l& > 1000 Then l& = 1000
'копиpyем yчаcток текcта в пеpеменнyю, иначе тоpмоз обеcпечен
    s$ = Left$(Txt, l&)
'обнyляем флажки
    fdo% = 0
    fwo% = 0
'пpоcматpиваем кycок текcта
    For n% = 1 To l&
'вытаcкиваем очеpедной cимвол
    c$ = Mid$(s$, n%, 1)
'еcли это pyccкая "о" в DOS кодиpовке то инкpементиpyем cчетчик
    If c$ = Chr$(174) Then fdo% = fdo% + 1
'еcли это pyccкая "о" в Win кодиpовке то инкpементиpyем cчетчик
    If c$ = Chr$(238) Then fwo% = fwo% + 1
    Next
'ycтанавливаем в конфиге тип пpоcмотpа по дефолтy
    If fdo% > fwo% Then 'это явно ДОC-текcт
        ANSIDETECT = False
    Else 'это явно Win-текcт
        ANSIDETECT = True
    End If
End Function
Моду создают модоки, а распространяют модозвоны.

NicSoft
Обычный пользователь
Обычный пользователь
 
Сообщения: 80
Зарегистрирован: 05.04.2003 (Сб) 18:51
Откуда: Егорьевск

Сообщение NicSoft » 29.01.2004 (Чт) 21:52

Спасибо всем за помощь.
Сейчас попробую, только у меня строки короткие (до 10 символов).
А как изменить кодировку на Win?

Akkelo
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 06.04.2002 (Сб) 7:52
Откуда: Russia

Сообщение Akkelo » 31.01.2004 (Сб) 23:09

А как изменить кодировку на Win?[/quote]

Есть win-API функции CharToOem и OemToChar для перевода текстовых переменных (или строк) из Dos в Win и обратно. Описание этих функций я сейчас уже не помню, но как ими пользоваться можно где-нибудь найти - это точно. :roll:

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 01.02.2004 (Вс) 19:42

Вот сейчас пишу прогу по перекодировке библиотеки :)
У меня есть библиотека с www.lib.ru (4.2 Гб)
Так она стояла на Unix сервере, и файлы оглавлений в ней в кодировке koi8r, и открывать их Блокнотом уж очень неудобно. Так я их перекодирую в Win-1251 и всё будет хоккей :)

P.S. 50% работы уже сделано...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 03.02.2004 (Вт) 16:25

Amed, сходи на http://www.rudenko.com и скачай Book Reader. Поверь, жизнь станет проще :)
Lasciate ogni speranza, voi ch'entrate.

Akkelo
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 06.04.2002 (Сб) 7:52
Откуда: Russia

Сообщение Akkelo » 03.02.2004 (Вт) 21:58

Исходник проги для перекодировки на VB меньше страницы кода. Только вот исходника у меня сейчас нет. :(
А используются в ней все те же функции API. (см. выше) 8)

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 04.02.2004 (Ср) 0:02

Хм. Я даже качать не стал :)

BookReader - "Read e-books with comfort"

1. У меня не "e-books" и мне не надо их читать, у меня стоит какая-то прога с воспроизведением текстов голосом (чтением, проще говоря :))
2. В библиотеке куча папок (сколько точно, не помню...), в которых файлы скинуты по авторам. А у каждого автора произведений (т.е. текстовых файлов) около пятидесяти, наверное или около того. Поэтому в каждой папке присутствует файлик ".dir", содержащий своего рода оглавление - полные названия произведений в этой папке. Файлы били на Unix сервере, поэтому Блокнотом их смотреть не получается (кодировка не та - koi8r), надо Word'ом, но Word'ом долго и нудно (надо отвечать на всякие запросы типа "Выберите кодировку" и т.д. и т.п.), так что меня папа заставил писать прогу по перекодированию всех этих файлов в нормальную Win 1251 кодировку. Отказаться нельзя - мне голова ещё нужна :roll:

P.S. Все файлы той "говорящей" программой читаются нормально, видно там есть встроенный определитель кодировки (хотя это и не факт).

P.P.S. Программа готова. Перекодирует 2600 файлов за 50 секунд :)


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

    TopList