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

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

23.10.2014, 11:04. Показов 2672. Ответов 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
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
23.10.2014, 12:29
zink0000, может перенести это в Готовые решения и полезные коды на Visual Basic 6.0?
0
 Аватар для Апострофф
9908 / 3924 / 742
Регистрация: 11.10.2011
Сообщений: 5,904
23.10.2014, 12:35
А может сюда для начала?
0
Модератор
10048 / 3894 / 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
Модератор
10048 / 3894 / 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
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru