Перекодировщик текста из Win в Dos

George-III
Дата: 20.02.2008 16:02:07
Не поделится ли кто-нибудь конвертором кодировок, надо доработать под себя, интересует в частности конвертор из Dos-866 в Win-1251.
4d_monster
Дата: 20.02.2008 16:11:35
В винАпи ЕСть
Функция OEMToAnsi

     Описание:
 function OEMToAnsi(OemSt, AnsiStr: PChar): Bool;

     Пеpеводит OemStr в символьный набоp ANSI.

     Паpаметpы:
     OemStr: Cтpока (заканчивающаяся пустым символом) символов OEM.
     AnsiStr: Пpинимающий буфеp или OemStr для пеpевода на месте.

     Возвpащаемое значение:
     Всегда False (-1).

 функция находится в файле user32.dll
                    
IMHO, Mon$te®
4d_monster
Дата: 20.02.2008 16:21:24
sdfgsdfgsdf
Дата: 20.02.2008 16:30:00
Для украины


Function ANSI_OEM(In_Str$) As String
Dim i%, New_Str$, SS$, sv%
  New_Str = ""
  For i = 1 To Len(In_Str)
     SS = Mid$(In_Str, i, 1)
        Select Case Asc(SS)
           Case 161: sv = 73
           Case 162: sv = 105
           Case 165: sv = 131
           Case 168: sv = 133
           Case 170: sv = 133
           Case 175: sv = 73
           Case 178: sv = 73
           Case 179: sv = 105
           Case 180: sv = 163
           Case 184: sv = 165
           Case 185: sv = 78
           Case 186: sv = 165
           Case 191: sv = 105
           Case 192 To 239: sv = Asc(SS) - 64
           Case 240 To 255: sv = Asc(SS) - 16
           Case Else: sv = Asc(SS)
        End Select
        New_Str = New_Str & Chr(sv)
  Next
  ANSI_OEM = New_Str
End Function

Function OEM_ANSI(In_Str As String) As String
Dim i As Integer, New_Str As String, SS As String, sv As Integer
  New_Str = ""
  For i = 1 To Len(In_Str)
     SS = Mid$(In_Str, i, 1)
        Select Case Asc(SS)
           Case 128 To 175: sv = Asc(SS) + 64
           Case 224 To 239: sv = Asc(SS) + 16
           Case 240: sv = 168
           Case 241: sv = 184
           Case 242: sv = 165
           Case 243: sv = 180
           Case 244: sv = 170
           Case 245: sv = 186
           Case 246: sv = 178
           Case 247: sv = 179
           Case 248: sv = 191
           Case Else: sv = Asc(SS)
        End Select
        New_Str = New_Str & Chr(sv)
  Next
  OEM_ANSI = New_Str
End Function
booby
Дата: 20.02.2008 16:46:37
George-III
Не поделится ли кто-нибудь конвертором кодировок, надо доработать под себя, интересует в частности конвертор из Dos-866 в Win-1251.
booby
Дата: 20.02.2008 16:47:56
текст пропал ;)
а что предполагается делать - конвертировать строки в программе или нужна утилита для перекодировки файлов?
booby
Дата: 20.02.2008 17:00:49
для перекодировки файлов я такой скрипт нарисовал:

<job>
	<runtime>
		<description>Скрипт перекодирует файл из ДОС кодировки в ANSI (win1251) </description>
		<unnamed
                 name = "filename"  
                 helpstring = "Имена файлов - источника и приемника для перекодировки."
                 many = "false" 
		 required = "2"
                 />
		<Example>Пример запуска: dos_toansi.wsf srcFileName destFileName</example>  
 	</runtime>
<script language="VBScript">
	Option explicit

	Dim objArgs
	Set objArgs = Wscript.Arguments
	
        If objArgs.Count < 2 Then
		Wscript.Arguments.ShowUsage
		Wscript.Quit
	End If
	
	Dim srcStream
	'поток для файла источника
	Set srcStream = Wscript.CreateObject("ADODB.Stream")	
	srcStream.Charset = "ibm866"
	srcStream.Open
	srcStream.LoadFromFile objArgs(0)
	
	Dim destStream
        'поток для файла-приемника
	Set destStream = WScript.CreateObject("ADODB.Stream")
	destStream.Charset = "windows-1251"
	destStream.Open
	srcStream.CopyTo destStream, srcStream.Size
	destStream.SaveToFile objArgs(1)
	destStream.close
	srcStream.Close

</script>
</job>

сохранить в файл с именем dos_toansi.wsf
Потом жмакнуть по нему мышом и он расскажет, как его надо запускать.
George-III
Дата: 20.02.2008 17:26:42
4d_monster
http://am.rusimport.ru/MSAccess/topic.aspx?ID=91

IMHO, Mon$te®

Спасибо большое, то что надо :)
Спасибо также всем :)
Анатолий ( Киев )
Дата: 20.02.2008 18:04:09
sdfgsdfgsdf
Для украины
Простите, sdfgsdfgsdf, а вы этими функциями пользуетесь? Что-то сильно напутано в первой:
Function ANSI_OEM(In_Str$) As String
...
        Select Case Asc(SS)
           Case 161: sv = 73     'Ў => I  Похоже, её автор не из Белоруссии  :-)
           Case 162: sv = 105    'ў => i

           Case 168: sv = 133    'Ё => Е  Похоже, и не из России  :-))
           Case 184: sv = 165    'ё => е  оба этих символа есть в OEM и 866,и в Укр. стандарте

           Case 170: sv = 133    'Є => Е  Здесь промолчу, но преобразование странное.
           Case 186: sv = 165    'є => е  
           Case 175: sv = 73     'Ї => i
           Case 191: sv = 105    'ї => i 
Вторая функциия для Укр. стандарта, OEM866 она преобазует неправильно.
К тому же потеряна ї (249).
sdfgsdfgsdf
Дата: 20.02.2008 18:18:50
ну не знаю.... работает норомально
(здесь просто "і" и "ї" конвертируются в английское "i")