Лучший отвечающий
Подскажите, как открыть текстовый файл, созданный в DOS-кодировке

Вопрос
-
Подскажите, как открыть текстовый файл, созданный в DOS-кодировке и переконвертировать его содержимое в Win-кодировку?
Ситуация такова, что нужно скриптом открыть txt-файл, который создается в DOS-программе, а затем отправить его на почтовый ящик, но уже в Win-кодировке, для корректного отображения символов....
Проблема возникает именно с кодировками - все остальное уже работает! ))
Заранее благодарю!
С уважением к профессионалам,
Александр
28 мая 2007 г. 5:28
Ответы
-
Воспользуйтесь одной из функций перекодировки, они делают одно и то же, но используют разные алгоритмы. В обоих случаях на вход подается строка символов.
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.
28 мая 2007 г. 21:01Модератор
Все ответы
-
Воспользуйтесь одной из функций перекодировки, они делают одно и то же, но используют разные алгоритмы. В обоих случаях на вход подается строка символов.
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.
28 мая 2007 г. 21:01Модератор -
Спасибо Вам огромное!!!
Надеюсь, теперь проблема решится!
Прямо сейчас попробую эти два варианта! ))
Еще раз спасибо!
29 мая 2007 г. 5:33 -
Если будете использовать первую процедуру, то возьмите ее по ссылке, а не из моего сообщения. Похоже, движок форума слегка "исправил" некоторые символы. Но идея все равно понятна. И, возможно, вам потребуется переписать ее на vbScript.29 мая 2007 г. 7:39Модератор
-
osr. написано: Если будете использовать первую процедуру, то возьмите ее по ссылке, а не из моего сообщения. Похоже, движок форума слегка "исправил" некоторые символы. Но идея все равно понятна. И, возможно, вам потребуется переписать ее на vbScript. Спасибо! Я уже опробовал второй вариант - все замечательно работает!!! ))) Спасибо Вам огромное! ))
PS. А Вас, случайно, не Олег Ржевский зовут? ))
29 мая 2007 г. 8:02 -
Случайно, да.29 мая 2007 г. 8:16Модератор
-
Так Вам огромный привет от всего TRUSTа!!! ))) К сожалению, мы не знакомы - я пришел сюда уже после Вашего ухода...29 мая 2007 г. 8:21