Имя: Пароль:
1C
 
UTF в Симв
Ø
0 OlegKZ
 
20.12.05
13:07
Привет всем!
Есть текстовой файл в UTF кодировке. Пользователю нужно оттуда вытащить некоторые данные и разместить из в таблице. Всё бы хорошо, но русский язык отображается не корректно. Есть ли готовый алгоритм перевода из УТФ в Симв?
1 smaharbA
 
20.12.05
13:09
utf-8 или utf-16 ?
ADODB.Stream самое простое
2 OlegKZ
 
20.12.05
13:18
(1)UTF-8
//Есть такое: из 1с в utf
Функция СимвToUnicod(Код) // преобразует символ в код UTF
  Перем ВозврПарам;
  если (Код>=КодСимв("А"))и(Код<=КодСимв("Я")) тогда
    ВозврПарам = Симв(208)+Симв(144+Код-КодСимв("А"));
  ИначеЕсли Код>=КодСимв("Ё") тогда
    ВозврПарам = Симв(208)+Симв(129);
  ИначеЕсли (Код>=КодСимв("а"))и(Код<=КодСимв("п")) тогда
    ВозврПарам = Симв(208)+Симв(176+Код-КодСимв("а"));
  ИначеЕсли (Код>=КодСимв("р"))и(Код<=КодСимв("я")) тогда
    ВозврПарам = Симв(209)+Симв(128+Код-КодСимв("р"));
  ИначеЕсли Код>=КодСимв("ё") тогда
    ВозврПарам = Симв(209)+Симв(145);
  Иначе
    ВозврПарам = Симв(Код)
  конецесли;
  Возврат(ВозврПарам)
КонецФункции
// Как сделать обратное?
3 Gloom
 
20.12.05
13:40
(2)см. (1)
4 OlegKZ
 
20.12.05
14:18
(1),(3) Можно подробнее о ADODB.Stream. Как это сделать?
5 Gloom
 
20.12.05
14:26
(4)
Держи примерчик:
=================================
    stream=createObject("adodb.stream");
    stream.open();
    stream.type=2;//adTypeText
    stream.loadFromFile(ПутьКФайлу);
    stream.charset="utf-8";
    stream.position=3;//пропускаем Byte Order Mark
    message(stream.readText());
    stream.close();
    stream="";
6 smaharbA
 
20.12.05
14:38
a="qwertyuiopasdfghjklzxcvbnm1234567890-=!@#$%^&*()_+<>/\?йцукенгшщзхъфывапролджэячсмитьбю., ";
s=createobject("ADODB.Stream");
s.type=2;
s.charset="utf-16";
S.Mode= 0;
S.Open;
S.LoadFromFile("работа с дипломом.doc");
Пока S.EOS=0 Цикл
  r=S.readtext(1);
  Если (Найти(a,r)>0) или (Найти(Врег(a),r)>0) или (r=Симв(10)) или (r=симв(9)) Тогда
    f=f+r;
  ИначеЕсли s=симв(12) Тогда
    f=f + РазделительСтрок;
  КонецЕсли;
КонецЦикла;//С днем рождения! ;)
Предупреждение(f);
...
Это с фильтром, а можно вообще просто
Type ФайлУТФ16>ФайлАСК
7 smaharbA
 
20.12.05
14:40
+(6)
КомандаСистемы("Type ФайлУТФ16>ФайлАСК");
Ну а дальше сам...
8 smaharbA
 
20.12.05
14:45
(7) Кажись накасячил, я тайпом из stdout беру, там выходит все аск, а так как в (7) небудет...
9 OlegKZ
 
20.12.05
14:45
(5) Спасибо. Переводит. А как сделать, чтоб это было как текстовый файл.
Текст=stream.readText();
КолСтр=Текст.КоличествоСтрок();
КолСтр=Текст.КоличествоСтрок();
{D:\LOCALBASE\BUСH2005\EXTFORMS\ИЗ_НДС_В_XLS.ERT(45)}: Значение не представляет агрегатный объект (КоличествоСтрок)
10 smaharbA
 
20.12.05
14:48
(9) Ты чего безобразничаешь, тебеж в (5) все разом переводит
11 Gloom
 
20.12.05
14:48
(9)
Текст=stream.readText();
КолСтр=СтрКоличествоСтрок(Текст);
Для счСтрок=1 По КолСтр Цикл
   ТекСтрока=СтрПолучитьСтроку(Текст,счСтрок);
...
12 OlegKZ
 
20.12.05
14:54
Спасибо Вам ОГРОМНОЕ smaharbA и Gloom. Выручили.
13 OlegKZ
 
20.12.05
15:12
А можно тогда еще вопрос. Чтобы сделать обратное
stream.charset="dos";
так пойдет?
14 Gloom
 
20.12.05
15:30
(13)Выражайся яснее...
15 smaharbA
 
20.12.05
15:30
s=createobject("ADODB.Stream");
s.type=2;
s.charset="utf-16";
S.Mode= 3;
S.Open;
s.WriteText("Ла-Ла-Ла");
s.savetofile("2.txt",2);
2 + 2 = 3.9999999999999999999999999999999...