Имя: Пароль:
1C
 
Как прочитать файл *.csv в UTF-8?
0 Мимохожий Однако
 
19.05.10
17:13
В обычной кодировке нет проблем, читается. А в UTF-8 нет
1 Ковычки
 
19.05.10
17:15
а какая разница ?
adodb.stream или есть метод конвертировать в командасистемы
2 Мимохожий Однако
 
19.05.10
17:16
(1)Примерчик кода есть (для 7.7)?
3 Ковычки
 
19.05.10
17:32
//*******************************************
Процедура Сформировать()
   Перем Имя,Путь;
   Если ФС.ВыбратьФайл(0,Имя,Путь,"","*.*|*.*","*")=0 Тогда
       Возврат;
   КонецЕсли;
   Файл=Путь+Имя;
   Стрим=СоздатьОбъект("ADODB.Stream");
   Стрим.Type=2;
   Стрим.charset="windows-1251";
   Стрим.Open();
   Стрим.LoadFromFile(Файл);
   Стрим.charset="utf-8";
   Стр=Лев(Стрим.ReadText(),255);
   Сообщить(Стр);
КонецПроцедуры
4 Ковычки
 
19.05.10
17:33
но более любо мене конвертасия в командной строке
5 miki
 
19.05.10
17:35
6 WickeD
 
19.05.10
17:44
7 Ковычки
 
19.05.10
18:15
//*******************************************
Процедура Сформировать()
   Перем Имя,Путь;
   Если ФС.ВыбратьФайл(0,Имя,Путь,"","*.*|*.*","*")=0 Тогда
       Возврат;
   КонецЕсли;
   Файл=Путь+Имя;
   УТФ16=КаталогВременныхФайлов()+_GetPerformanceCounter()+"-unicode.txt";
   ЦП1251=КаталогВременныхФайлов()+_GetPerformanceCounter()+"-cp1251.txt";
   БАТ=КаталогВременныхФайлов()+_GetPerformanceCounter()+".bat";
   Стр="@echo off
   |chcp 1251 > nul
   |chcp 65001 |>> """+УТФ16+""" cmd /u /c ""type """+Файл+""" & chcp 1251 > nul""
   |chcp 1251 > nul
   |type """+УТФ16+""" > """+ЦП1251+"""
   |chcp 866 > nul";
   Текст=СоздатьОбъект("Текст");
   Текст.ДобавитьСтроку(Стр);
   Текст.Записать(БАТ);
   КомандаСистемы(БАТ);
   Текст=СоздатьОбъект("Текст");
   Текст.Открыть(ЦП1251);
   Для Сч=1 По Текст.КоличествоСтрок() Цикл
       Сообщить(Лев(Текст.ПолучитьСтроку(Сч),255));
   КонецЦикла;
   ФС.УдалитьФайл(УТФ16);
   ФС.УдалитьФайл(ЦП1251);
   ФС.УдалитьФайл(БАТ);
КонецПроцедуры
8 Ковычки
 
19.05.10
18:16
(6) не верная функция, может вернуть лажу
9 Ковычки
 
19.05.10
18:18
точнее скажем, верная для русского и пунктуации
10 WickeD
 
19.05.10
19:53
(8) :) хорошо, могу я добавить ваши примеры ссылаясь на Вас как автора?!
11 i_rodionov
 
19.05.10
19:55
Работает хорошо и (3), там нужно убирать первые три байта сигнатуры Unicode
12 i_rodionov
 
19.05.10
19:59
+(11) Прошу прощения, это при записи через ADO в UTF-8 нужно в начале файла удалять 3 байта сигнатуры Unicode
13 Ковычки
 
19.05.10
20:02
(12) не обязательно
(10) )) да это я так из вредности, в утф-8 бывает от 1 до 6 байтов на знак, просто привыкли к 2-м (пришлось тут писать в пакетном файле проверку на то, что текст является utf-8 или не является, без сторонних утилит)

а автор - smaharbA
14 i_rodionov
 
19.05.10
20:06
(13) А мне пришлось удалять, иначе парсер *.csv не читал. Почему -- не знаю, это были подрядчики по веб сайту, и почему они не могли распорядиться и так, мне не известно
15 Ковычки
 
19.05.10
20:08
(14) для файлов результирующих иногда конечно надо
16 i_rodionov
 
19.05.10
20:11
(15) Да, вот так
   СтримКопия = СоздатьОбъект("AdoDB.Stream");
   СтримКопия.Type = 1; // бинарный
   СтримКопия.Mode= 3;
   СтримКопия.Open();
   
   Стрим.Position = 3; // пропустим три байта
   Стрим.CopyTo(СтримКопия,-1);
   Стрим.Close();

   СтримКопия.SaveToFile(СокрЛП(КаталогИБ())+"\EXPORT\tovar.csv",2);
   СтримКопия.Close();
17 Мимохожий Однако
 
19.05.10
23:33
Спасибо всем. Пригодилось.
2 + 2 = 3.9999999999999999999999999999999...