none
Подскажите, как открыть текстовый файл, созданный в DOS-кодировке RRS feed

  • Вопрос

  • Подскажите, как открыть текстовый файл, созданный в DOS-кодировке и переконвертировать его содержимое в Win-кодировку?

     

    Ситуация такова, что нужно скриптом открыть txt-файл, который создается в DOS-программе, а затем отправить его на почтовый ящик, но уже в Win-кодировке, для корректного отображения символов....

     

    Проблема возникает именно с кодировками - все остальное уже работает! ))

     

    Заранее благодарю!

     

    С уважением к профессионалам,

    Александр

Ответы

  •  

    Воспользуйтесь одной из функций перекодировки, они делают одно и то же, но используют разные алгоритмы. В обоих случаях на вход подается строка символов.

    function dos2win(text){
        var out = ""
        var dos="Ђ ЃЎ‚ўѓЈ„¤…Ґрс†¦‡§€Ё‰©ЉЄ‹«Њ¬Ќ-Ћ®ЏЇђа‘б’в“г”д•е–ж—з˜и™йљк›лњмќнћоџппя"
        var win="АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯяя "
        for (i=0; i<text.length; i++) {
            var ch = text.charAt(i);
            var index = dos.indexOf(ch)
            if (index >= 0){
                ch = win.charAt(index);
            }
            out = out + ch;
        }
        return out;
    }

    ' Функция для перевода строки из DOS- в Windows-кодировку
    Function DosToWin(s)
    Dim i,k,ss
      ss=""
      For i=1 To Len(s)  ' Цикл по всем символам в строке
        k = Asc(Mid(s,i,1))  ' Определяем ANSI-код i-го символа
        ' Изменяем код k на код соответствующего символа в  
        ' Windows-кодировке
        If (128 <= k) And (k <= 175) Then
          k=k+64
        ElseIf (224 <= k) And (k <= 239) Then
          k=k+16
        ElseIf k = 240 Then
          k=168
        ElseIf k = 241 Then
          k=184
        End If
        ss=ss+Chr(k)  ' Возвращаем преобразованную строку
      Next
    DosToWin=ss
    End Function

     

    Найдено на форуме RU-Board.

    Модератор

Все ответы

  •  

    Воспользуйтесь одной из функций перекодировки, они делают одно и то же, но используют разные алгоритмы. В обоих случаях на вход подается строка символов.

    function dos2win(text){
        var out = ""
        var dos="Ђ ЃЎ‚ўѓЈ„¤…Ґрс†¦‡§€Ё‰©ЉЄ‹«Њ¬Ќ-Ћ®ЏЇђа‘б’в“г”д•е–ж—з˜и™йљк›лњмќнћоџппя"
        var win="АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯяя "
        for (i=0; i<text.length; i++) {
            var ch = text.charAt(i);
            var index = dos.indexOf(ch)
            if (index >= 0){
                ch = win.charAt(index);
            }
            out = out + ch;
        }
        return out;
    }

    ' Функция для перевода строки из DOS- в Windows-кодировку
    Function DosToWin(s)
    Dim i,k,ss
      ss=""
      For i=1 To Len(s)  ' Цикл по всем символам в строке
        k = Asc(Mid(s,i,1))  ' Определяем ANSI-код i-го символа
        ' Изменяем код k на код соответствующего символа в  
        ' Windows-кодировке
        If (128 <= k) And (k <= 175) Then
          k=k+64
        ElseIf (224 <= k) And (k <= 239) Then
          k=k+16
        ElseIf k = 240 Then
          k=168
        ElseIf k = 241 Then
          k=184
        End If
        ss=ss+Chr(k)  ' Возвращаем преобразованную строку
      Next
    DosToWin=ss
    End Function

     

    Найдено на форуме RU-Board.

    Модератор
  • Спасибо Вам огромное!!!

    Надеюсь, теперь проблема решится!  Прямо сейчас попробую эти два варианта! ))

    Еще раз спасибо!

  • Если будете использовать первую процедуру, то возьмите ее по ссылке, а не из моего сообщения. Похоже, движок форума слегка "исправил" некоторые символы. Но идея все равно понятна. И, возможно, вам потребуется переписать ее на vbScript.
    Модератор
  •  osr. написано:
    Если будете использовать первую процедуру, то возьмите ее по ссылке, а не из моего сообщения. Похоже, движок форума слегка "исправил" некоторые символы. Но идея все равно понятна. И, возможно, вам потребуется переписать ее на vbScript.

     

    Спасибо! Я уже опробовал второй вариант - все замечательно работает!!! ))) Спасибо Вам огромное! ))

     

    PS. А Вас, случайно, не Олег Ржевский зовут? ))

  • Случайно, да.
    Модератор
  • Так Вам огромный привет от всего TRUSTа!!! ))) К сожалению, мы не знакомы - я пришел сюда уже после Вашего ухода...