powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / powershell Как перекодировать файл из ANSI (DOS) в OEM
1 сообщений из 1, страница 1 из 1
powershell Как перекодировать файл из ANSI (DOS) в OEM
    #34950215
r.t.f.m.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Недавно столкнулся с необходимостью перекодировать файлы из DOS кодировки в Windows (CP866->CP1251). Использовать функцию API AnsiToOem не получилось, так как содержимое проходит через конвейер, который в свою очередь пытается привести кодировку к Юникоду. Пришлось воспользоваться "дедовским" способом-составить таблицы перекодировки.
Может кто посоветует способ проще?
Код: plaintext
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.
function ANSI2OEM
{
 

[int[]] $win=	                 1096 , 1080 , 1025 , 1105 , 1088 , 1089 , 1090 , 1091 ,`
				 1092 , 1093 , 1094 , 1095 , 1097 , 1098 , 1099 , 1100 ,`
				 1101 , 1102 , 1103 , 1040 , 1072 , 1041 , 1073 , 1042 ,`
				 1074 , 1043 , 1075 , 1044 , 1076 , 1045 , 1077 , 1046 ,`
				 1078 , 1047 , 1079 , 1048 , 1049 , 1081 , 1050 , 1082 ,`
				 1051 , 1083 , 1052 , 1084 , 1053 , 1085 , 1054 , 1086 ,`
				 1055 , 1087 , 1056 , 1057 , 1058 , 1059 , 1060 , 1061 ,`
				 1062 , 1063 , 1064 , 1065 , 1066 , 1067 , 1068 , 1069 ,`
				 1070 , 1071 ;


[int[]] $dos=	                 1080 , 1025 , 1088 , 1089 , 1072 , 1073 , 1074 , 1075 ,`
				 1076 , 1077 , 1078 , 1079 , 1081 , 1082 , 1083 , 1084 ,`
				 1085 , 1086 , 1087 , 1026 , 160 , 1027 , 1038 , 8218 ,`
				 1118 , 1107 , 1032 , 8222 , 164 , 8230 , 1168 , 8224 ,`
				 166 , 8225 , 167 , 8364 , 8240 , 169 , 1033 , 1028 ,`
				 8249 , 171 , 1034 , 172 , 1036 , 173 , 1035 , 174 ,`
				 1039 , 1031 , 1106 , 8216 , 8217 , 8220 , 8221 , 8226 ,`
				 8211 , 8212 , 152 , 8482 , 1113 , 8250 , 1114 , 1116 ,`
				 1115 , 1119 ;



	$crlf=[char] 13  + [char] 10 

	foreach($DOSString in $input){
		[String]$allcontent+=$DOSString + $crlf
	}
	
	$allcontent=$allcontent.SubString( 0 ,$allcontent.Length- 2 )

	[int]$cnt=$dos.Count 

	for([int]$i= 0 ;$i -lt $cnt;$i++){
		$allcontent=$allcontent.Replace([char]$dos[$i],[char]$win[$i])
	}
	
 	return $allcontent

        trap {$(throw "Ошибка выполнения перекодировки:$_")}

}

#Пример использования:
get-content .\dos.txt | ANSI2OEM | set-content .\win.txt
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / powershell Как перекодировать файл из ANSI (DOS) в OEM
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]