![]() |
![]() |
![]() |
|
Как прочитать файл *.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
|
Спасибо всем. Пригодилось.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |