Имя: Пароль:
1C
 
чтение текста в кодировке ISO
0 фобка
 
18.03.10
08:15
приветсвую, возник вопрос/проблема
есть функция (нашел где-то на мисте):

Функция Перекодировка(Стр="",Кодировка="windows-1251")
   Стрим = СоздатьОбъект("Adodb.Stream");
   Стрим.Type = 2;
   Стрим.Mode= 3;
   Стрим.charset="iso-8859-5";
   Стрим.Open();
   Стрим.WriteText(Стр);
   Стрим.Position=0;
   Стрим.charset=Кодировка;
   Рез=Стрим.ReadText(-1);
   Стрим.Close();
   Возврат    Рез;
КонецФункции

(автора не знаю, возможно smaharbA)
возвращает
"160       ҐИДЕРЕ                   ?ЛЕКСАНД                 Ґс??°?°"                
т.е. не все символы конвертировались.. В чем ошибка или как преобразовать ISO 8859-5?
1 фобка
 
18.03.10
09:19
вернее так.. Вместо заглавных закорючки, а  прописные отобразились в верхнем регистре
2 фобка
 
18.03.10
10:51
в общем, если открывать файл одинесом получается вышеуказанная ситуация..
   oTXT = CreateObject("Text");
   oTXT.Open("c:\WORK\H R\PSHRR848.C");
   cString = oTXT.GetLine(2);
   
   Стрим = СоздатьОбъект("Adodb.Stream");
   Стрим.charset="iso-8859-5";
   Стрим.Open();
   Стрим.WriteText(cString);
   Стрим.Position=0;
   Стрим.charset="windows-1251";
   Рез=Стрим.ReadText(-1);
   Стрим.Close();
   Message("1 = "+Рез);

а если Adodb.Stream то все работает

   Стрим = СоздатьОбъект("Adodb.Stream");
   Стрим.charset="iso-8859-5";
   Стрим.Open();
   Стрим.LoadFromFile("c:\WORK\H R\PSHRR848.C");
   Стрим.Position=0; // здесь уже можно дергать нормальный текст
   Стрим2 = СоздатьОбъект("Adodb.Stream");
   Стрим2.charset="windows-1251";
   Стрим2.Open();
   Стрим2.WriteText(Стрим.ReadText);
   Стрим2.Position=0;
   Рез=Стрим2.ReadText(-1);
   Стрим.Close();
   Стрим2.Close();
   Message("2 = "+Рез);
   Message("StrLen(Рез) = "+StrLen(Рез));

отоноче..
Вопрос закрыт, всем спасибо за поддержку :)
3 smaharbA
 
18.03.10
16:03
Ни единого объекта

//*******************************************
Процедура Сформировать()
   Стр="Нажрися вотки и закуси ка селедкой! ";
   База=""+_GetPerformanceCounter()+".txt";
   УТФ=КаталогВременныхФайлов()+"УТФ"+База;
   ИСО=КаталогВременныхФайлов()+"ИСО"+База;
   ДОС=КаталогВременныхФайлов()+"ДОС"+База;
   ОбратноДОС=КаталогВременныхФайлов()+"ОбратноДОС"+База;
   Текст=СоздатьОбъект("Текст");
   Текст.КодоваяСтраница(1);
   Для Сч=1 По 10 Цикл
       Текст.ДобавитьСтроку(Стр);
   КонецЦикла;
   Текст.Записать(ДОС);
   Текст.Очистить();
   КомандаСистемы("chcp 28595 > nul & echo off 2> """+ИСО+""" & for /f ""delims="" %i in ("+ДОС+") do (chcp 28595|>> """+ИСО+""" echo %i)");
//    КомандаСистемы("cmd /c ""chcp 28595|> """+ИСО+""" echo "+Стр+"""");
   Текст.КодоваяСтраница(0);
   Текст.ДобавитьСтроку(Симв(255)+Симв(254));
   Текст.Записать(УТФ);
   КомандаСистемы("chcp 28595|> nul echo & cmd /u /c type """+ИСО+""" >> """+УТФ+"""");
   КомандаСистемы("type """+УТФ+""" > """+ОбратноДОС+"""");
   Текст.КодоваяСтраница(1);
   Текст.Открыть(ОбратноДОС);
   Для Сч=1 По Текст.КоличествоСтрок() Цикл
       Сообщить(Текст.ПолучитьСтроку(Сч));
   КонецЦикла;
КонецПроцедуры
4 Fragster
 
гуру
18.03.10
16:08
(2) достаточно
   Стрим = СоздатьОбъект("Adodb.Stream");
   Стрим.charset="iso-8859-5";
   Стрим.Open();
   Стрим.LoadFromFile("c:\WORK\H R\PSHRR848.C");
   Рез=Стрим.ReadText();

(3) это реальный овнокод, звиняй.
5 smaharbA
 
18.03.10
16:09
(4) это реально код, кто так не умеет нефиг браться за другое
6 Fragster
 
гуру
18.03.10
16:10
(5) не скажи
7 smaharbA
 
18.03.10
16:12
(6) скажу, ибо уметь извернуться при отсутствии наличия
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс