С Новым годом! Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
 Аватар для zink0000
258 / 107 / 26
Регистрация: 15.03.2012
Сообщений: 353
Записей в блоге: 35

Программа распознавания кодировки - DOS или WIN

23.10.2014, 11:04. Показов 2660. Ответов 9

Студворк — интернет-сервис помощи студентам
Программа проверяет все файлы с заданным расширением
в заданном каталоге (со всеми подкаталогами)
и определяет в какой кодировке DOS или WIN записан файл,
если в DOS, то конвертирует DOS в WIN.

DosWin.zip
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.10.2014, 11:04
Ответы с готовыми решениями:

Кодировки DOS и WIN
Основная задача пусть есть *****.txt файл с кодировкой DOS необходимо написать программу которая конвертирует текст из DOS в WIN и...

Смена ASCII кодировки с DOS на WIN
при открытии файла из дос для нормального отображения шрифтов в WIN нужно сменить кодировку

Из Win кодировки в Dos
Подскажите, пожалуйста, как можно преобразовать текст из Windows кодировки в Dos кодировку. В билдере, например, были функции OemToChar()...

9
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
23.10.2014, 12:22
А если в файле используются сразу обе кодировки?
Например такое может быть для Dos-программ
(Скажем дан параллельный комментарий в обоих
кодировках). Как он будет определяться?
1
Модератор
10047 / 3893 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
23.10.2014, 12:29
zink0000, может перенести это в Готовые решения и полезные коды на Visual Basic 6.0?
0
 Аватар для Апострофф
9908 / 3923 / 742
Регистрация: 11.10.2011
Сообщений: 5,904
23.10.2014, 12:35
А может сюда для начала?
0
Модератор
10047 / 3893 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
23.10.2014, 12:44
Апострофф, нет. Если нашли баги пишите сюда. В той теме в шапке написано что делать.

Добавлено через 8 минут
Для справки кодировку по данным (любую) можно получить через MLANG, одной строчкой.
2
 Аватар для zink0000
258 / 107 / 26
Регистрация: 15.03.2012
Сообщений: 353
Записей в блоге: 35
10.11.2014, 10:46  [ТС]
The trick, если Вас не затруднит,
можно пример на VB5 или VB6 с этим самым MLANG для определения кодировки UTF-8.
Пожалуйста.

Добавлено через 8 минут
А если в файле используются сразу обе кодировки?
Например такое может быть для Dos-программ
(Скажем дан параллельный комментарий в обоих
кодировках). Как он будет определяться?
geh, честно говоря, не знаю...
У меня ситуация другая - вперемешку лежат файлы в ДОС и ВИН кодировке и надо весь каталог привести к общему знаменателю.
Но можно построчно читать...
Насколько я понимаю в пределах одной строки кодировка не меняется и алгоритм должен работать.
То-есть в пределах одной строки он кодировку определит
и соответственно все строки можно перевести в одну кодировку,
НО ЗАЧЕМ? ведь насколько я понимаю ценность этого файла именно в том,
что в нём записи сделаны в двух кодировках ОДНОВРЕМЕННО.

Добавлено через 7 минут
zink0000, может перенести это в Готовые решения и полезные коды на Visual Basic 6.0?
The trick, смотрите сами, если Вы считаете, что программа достойна там находиться, то можно и перенести.
0
1 / 1 / 0
Регистрация: 10.11.2014
Сообщений: 19
10.11.2014, 11:13
При установке пакета Денвер во временной папке распаковщика для инсталляции используется пакетный файл со смешанной кодировкой. Предупреждения написаны в вин-кодировке, а пояснения в дос. Прога с ним работает некорректно
0
Модератор
10047 / 3893 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
10.11.2014, 11:58
Цитата Сообщение от zink0000 Посмотреть сообщение
можно пример на VB5 или VB6 с этим самым MLANG для определения кодировки UTF-8.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Option Explicit
 
Private Sub Form_Load()
    Dim MLang       As CMultiLanguage
    Dim IMLang2     As IMultiLanguage2
    Dim Encoding()  As tagDetectEncodingInfo
    Dim encCount    As Long
    Dim inp()       As Byte
    Dim index       As Long
    
    Open "c:\Test.txt" For Binary As #1
    ReDim inp(LOF(1) - 1)
    Get #1, , inp()
    Close #1
    
    Set MLang = New CMultiLanguage
    Set IMLang2 = MLang
    
    encCount = 16
    ReDim Encoding(encCount - 1)
    IMLang2.DetectInputCodepage 0, 0, inp(0), UBound(inp) + 1, Encoding(0), encCount
    
    For index = 0 To encCount - 1
        
        If Encoding(index).nCodePage = 65001 Then 'UTF-8
            Debug.Print "Задетектирован UTF-8, вероятность " & Encoding(index).nConfidence
        End If
        
    Next
    
End Sub
Нужно подключить tlb
Вложения
Тип файла: rar MLang.rar (8.8 Кб, 78 просмотров)
3
 Аватар для zink0000
258 / 107 / 26
Регистрация: 15.03.2012
Сообщений: 353
Записей в блоге: 35
14.11.2014, 13:46  [ТС]
The trick, спасибо огромное.

Добавлено через 16 минут
При установке пакета Денвер во временной папке распаковщика для инсталляции используется пакетный файл со смешанной кодировкой. Предупреждения написаны в вин-кодировке, а пояснения в дос. Прога с ним работает некорректно
Потому что для подобных (со смешанной кодировкой) файлов не предназначена.
Я уже объяснял для чего её писал.
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
28.02.2015, 23:50
Как-то очень сносно работает этот MLANG.

Например, строку:
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Mafia II - Расширенное издание\Mafia II - Расширенное издание.lnk
Распознает как:
Code
1
2
3
4
5
6
7
8
9
10
11
12
C:\Users\Alex\Desktop\MLang\DOS.txt
Задетектирован 932, кол-во: 60%, вероятность 100%
C:\Users\Alex\Desktop\MLang\WIN.txt
Задетектирован 932, кол-во: 60%, вероятность 100%
C:\Users\Alex\Desktop\MLang\UTF-8.txt
Задетектирован 65001, кол-во: 60%, вероятность 86%
C:\Users\Alex\Desktop\MLang\UTF-8-BOM.txt
Задетектирован 65001, кол-во: 60%, вероятность 86%
C:\Users\Alex\Desktop\MLang\UTF-16.txt
Задетектирован 20127, кол-во: 100%, вероятность 100%
C:\Users\Alex\Desktop\MLang\UTF-16-BOM.txt
Задетектирован 1200, кол-во: 100%, вероятность 100%
Для проверки строки WIN или DOS использую вот такой грубый, но довольно надежный вариант:

Кликните здесь для просмотра всего текста

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
Option Explicit
 
Sub Form_Load()
    CheckLang App.Path & "\" & "DOS.txt"
    CheckLang App.Path & "\" & "WIN.txt"
    CheckLang App.Path & "\" & "UTF-8.txt"
    CheckLang App.Path & "\" & "UTF-8-BOM.txt"
    CheckLang App.Path & "\" & "UTF-16.txt"
    CheckLang App.Path & "\" & "UTF-16-BOM.txt"
End Sub
 
Sub CheckLang(file As String)
    Dim buf As String
    Dim ff As Integer
  
    ff = FreeFile()
  
    Open file For Binary As #ff
    buf = Space$(LOF(ff))
    Get #ff, , buf
    Close #ff
    
    Debug.Print file
 
    If HasBOM_UTF16(buf) Then
        Debug.Print "UTF-16"
    ElseIf HasBOM_UTF8(buf) Then
        Debug.Print "UTF-8"
    ElseIf isOEM(buf) Then
        Debug.Print "DOS"
    Else
        Debug.Print "WIN"
    End If
End Sub
 
Public Function isOEM(Source As String) As Boolean
    Dim Ident As String
    Dim i As Long
    
    Ident = "*ќЎўЈ¤Ґ¦§«¬*®ЂЃѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—?™њ›љћџ"
    
    For i = 1 To Len(Ident)
        If InStr(Source, Mid(Ident, i, 1)) <> 0 Then isOEM = True: Exit Function
    Next
End Function
 
 
Public Function Convert_OEM_to_Win(Source$, isReverse As Boolean) As String
    Dim OEM$, WIN$, pos&, St$, L$, n&
    
    ' В конце этой строки невидимый символ - не трогать !!!
    OEM = "нќ*ЎўЈ¤Ґс¦§Ё©Є«¬*®ЇабвгдежзиймлкопЂЃ‚ѓ„…р†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—?™њ›љћџртфсух"
    WIN = "эЭабвгдеёжзийклмнопрстуфхцчшщьыъюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЮЯЁЄЇёєї"
 
    For n = 1 To Len(Source)
        L = Mid$(Source, n, 1)
        pos = IIf(isReverse, InStr(WIN, L), InStr(OEM, L))
        If pos <> 0 Then
            St = St & IIf(isReverse, Mid$(OEM, pos, 1), Mid$(WIN, pos, 1))
          Else
            St = St & L
        End If
    Next
    Convert_OEM_to_Win = St
End Function
 
Public Function HasBOM_UTF16(sText As String) As Boolean
    If Left$(sText, 2) = Chr$(&HFF) & Chr$(&HFE) Then HasBOM_UTF16 = True
End Function
 
Public Function HasBOM_UTF8(sText As String) As Boolean
    If Left$(sText, 3) = Chr$(&HEF) & Chr$(&HBB) & Chr$(&HBF) Then HasBOM_UTF8 = True
End Function
Code
1
2
3
4
5
6
7
8
9
10
C:\Users\Alex\Desktop\CheckLang\WIN.txt
WIN
C:\Users\Alex\Desktop\CheckLang\UTF-8.txt
DOS
C:\Users\Alex\Desktop\CheckLang\UTF-8-BOM.txt
UTF-8
C:\Users\Alex\Desktop\CheckLang\UTF-16.txt
WIN
C:\Users\Alex\Desktop\CheckLang\UTF-16-BOM.txt
UTF-16


Хотя тут определение юникода чисто для "красоты" (по БУМу).
Код лучше брать из вложения. Форум мог испортить символы.
Вложения
Тип файла: zip MLang.zip (12.4 Кб, 26 просмотров)
Тип файла: zip CheckLang.zip (3.6 Кб, 24 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.02.2015, 23:50
Помогаю со студенческими работами здесь

Конвертация кодировки DOS в Win
Есть файл с данными но в кодировке DOS. Необходимо как то преобразовать в Win, чтобы выводить данные в форму... Если есть предложения -...

Блок схема кодировки с Win в Dos (и меню)
procedure Convert(var a:string);{ANSI --&gt; ANSII} var i:integer; begin for i:=1 to length(a) do if ord(a) in then a:=chr(ord(a)-64)...

Какие кодировки(win, koi8, dos, mac, iso) поддерживает RichEdit
Какие кодировки(win, koi8, dos, mac, iso) поддерживает RichEdit

В чём отличия кодировки ms dos от кодировки ms windows?
Всем привет, подскажите в чём отличия кодировки ms dos от кодировки ms windows?

Драйвера звуковой карты yamaha ymf718-s под dos или win 3.11.
Подскажите, пожалуйста, ссылку на драйвера звуковой карты yamaha ymf718-s под dos или win 3.11. Или скинте на Dustin1@rambler.ru. Заранее...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru