Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / powershell Как перекодировать файл из ANSI (DOS) в OEM / 1 сообщений из 1, страница 1 из 1
19.11.2007, 20:47
    #34950215
r.t.f.m.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
powershell Как перекодировать файл из ANSI (DOS) в OEM
Недавно столкнулся с необходимостью перекодировать файлы из 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
Форумы / Программирование [игнор отключен] [закрыт для гостей] / powershell Как перекодировать файл из ANSI (DOS) в OEM / 1 сообщений из 1, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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