Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
256 / 105 / 26
Регистрация: 15.03.2012
Сообщений: 351
Записей в блоге: 29
1

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

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

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

DosWin.zip
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.10.2014, 11:04
Ответы с готовыми решениями:

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

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

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

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

9
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
23.10.2014, 12:22 2
А если в файле используются сразу обе кодировки?
Например такое может быть для Dos-программ
(Скажем дан параллельный комментарий в обоих
кодировках). Как он будет определяться?
1
Модератор
8752 / 3247 / 844
Регистрация: 22.02.2013
Сообщений: 4,922
Записей в блоге: 78
23.10.2014, 12:29 3
zink0000, может перенести это в Готовые решения и полезные коды на Visual Basic 6.0?
0
Заблокирован
23.10.2014, 12:35 4
А может сюда для начала?
0
Модератор
8752 / 3247 / 844
Регистрация: 22.02.2013
Сообщений: 4,922
Записей в блоге: 78
23.10.2014, 12:44 5
Апострофф, нет. Если нашли баги пишите сюда. В той теме в шапке написано что делать.

Добавлено через 8 минут
Для справки кодировку по данным (любую) можно получить через MLANG, одной строчкой.
2
256 / 105 / 26
Регистрация: 15.03.2012
Сообщений: 351
Записей в блоге: 29
10.11.2014, 10:46  [ТС] 6
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 7
При установке пакета Денвер во временной папке распаковщика для инсталляции используется пакетный файл со смешанной кодировкой. Предупреждения написаны в вин-кодировке, а пояснения в дос. Прога с ним работает некорректно
0
Модератор
8752 / 3247 / 844
Регистрация: 22.02.2013
Сообщений: 4,922
Записей в блоге: 78
10.11.2014, 11:58 8
Цитата Сообщение от 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 Кб, 53 просмотров)
3
256 / 105 / 26
Регистрация: 15.03.2012
Сообщений: 351
Записей в блоге: 29
14.11.2014, 13:46  [ТС] 9
The trick, спасибо огромное.

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

Например, строку:
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Mafia II - Расширенное издание\Mafia II - Расширенное издание.lnk
Распознает как:
Код
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
Код
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 Кб, 23 просмотров)
Тип файла: zip CheckLang.zip (3.6 Кб, 19 просмотров)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.02.2015, 23:50
Помогаю со студенческими работами здесь

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

Какие кодировки(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. Или...

Как во free pascal узнать, в какой ос работает программа: Win 7 или Win xp?
Так же хотелось бы узнать имя пользователя, запустившего программу.

Запустится программа из DOS или нет?
вот код программы: program switch; uses Crt; var C : String; C1, TempS : String; begin ...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru