Имя: Пароль:
1C
1С v8
и снова кодировка текстового файла
0 igel1969
 
22.06.17
12:43
Здравствуйте!
я уж и СП посмотрел, и форумы прошерстил - везде один и тот же ответ - при записи устанавливать тип файла. Ну, устанавливаю я, не идиот же:

Текст = Новый ТекстовыйДокумент;
    Текст.УстановитьТипФайла("windows-1251");
    ИмяФайла = "2344_" + Формат(Дата, "ДФ=гггг") + "-" + Формат(Дата, "ДФ=ММ") + "-" + Формат(Дата, "ДФ=дд") + ".csv";
    Текст.ДобавитьСтроку("OPERATION_DATE;AMOUNT;TRANSACTION_ID;INVOICE_ID;PAYMENT_TYPE;TICKET_ID;TERMINAL_ID;GATE_TRANSACTION_ID");
    Пока Результат.Следующий() Цикл
        ДатаСтр = МойФормат(НайтиЗначениеПараметра(Результат.Приложение, "TICKET_REGISTRATION_TIME"));
        СуммаСтр = Формат(Число(НайтиЗначениеПараметра(Результат.Приложение, "PRICE_RETURNED")) / 100, "ЧДЦ=2; ЧРД=.; ЧГ=0");
        Транзакция = НайтиЗначениеПараметра(Результат.Приложение, "EXTERNAL_TRANSACTION_ID");
        Инвойс = "";
        ТипПлатежа = "zemlianuhin";
        Билет = НайтиЗначениеПараметра(Результат.Приложение, "TICKET_ID");
        Терминал = НайтиЗначениеПараметра(Результат.Приложение, "TERMINAL_ID");
        Гейт = "";
        Текст.ДобавитьСтроку(ДатаСтр + ";" + СуммаСтр + ";" + Транзакция + ";" + Инвойс + ";" + ТипПлатежа + ";" + Билет + ";" + Терминал + ";" + Гейт);
    КонецЦикла;
    Текст.Записать(Кат + ИмяФайла, "windows-1251");

Но все-равно, открываешь потом файл, например, программой Notepad++ и в правом нижнем углу показывает кодировку UTF-8, да и заказчик тоже присылает письмо, что это UTF-8, а ему надо Win1251.

Подскажите, пожалуйста, в чем дело???????
1 quest
 
22.06.17
12:55
пробуй не строку передавать, а явно КодировкаТекста.ANSI
2 igel1969
 
22.06.17
12:56
(1) а ANSI и 1251 - это одно и то же?
3 igel1969
 
22.06.17
12:59
(1) нет, то же самое (только заказчику не отправлял).

попробую по-другому сформулировать - а как точно посмотреть кодировку файла? может мне программа notepad++ врет?
4 Cyberhawk
 
22.06.17
13:00
"как точно посмотреть кодировку файла?" // Никак - нет такого понятия
5 quest
 
22.06.17
13:02
В фаре открой на просмотр и играйся кодировками пока не видишь свои русские буквы.
6 quest
 
22.06.17
13:02
(4) поддержу
7 Адинэснег
 
22.06.17
13:08
а если
ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла, КодировкаТекста.UTF8, , Истина);
ТекстФайла     = "текст";
ЗаписьТекста.ЗаписатьСтроку(ТекстФайла);
ЗаписьТекста.Закрыть();
8 Адинэснег
 
22.06.17
13:08
ну то есть
ЗаписьТекста = Новый ЗаписьТекста(ИмяФайлаПротокола, КодировкаТекста.ANSI, , Истина);
ТекстФайла     = "текст";
ЗаписьТекста.ЗаписатьСтроку(ТекстФайла);
ЗаписьТекста.Закрыть();
9 igel1969
 
22.06.17
13:18
(8) я с этого начинал, не получилось. потом на всякий случай перешел к ТекстовомуДокументу, так как все примеры были на нем.
10 igel1969
 
22.06.17
13:19
ладно, отправил заказчику следующее письмо:

Добрый день, Сергей.

Вот файл. Несмотря на одинаковые названия, это новый файл, я сгенерировал его только что.
Я уверен, что этот файл в кодировке windows-1251. Но Notepad++ все-равно показывает UTF-8.
Текстовый редактор Notepad++ не умеет правильно определять кодировку.
Для примера можно сделать следующее: создать файл в Notepad++ в кодировке windows-1251,
ввести какой либо текст и сохранить. Потом обязательно ЗАКРЫТЬ этот файл, а затем
заново открыть. Если в тексте были только латинские буквы (кроме цифр), то Notepad++
покажет Вам кодировку UTF-8, а если были еще и русские, то покажет ANSI.
Я смотрю во встроенном просмотрщике Тотал-командера, мне показывает windows-1251.

Жду ответа.
11 Zyka
 
22.06.17
13:19
Ф = ПолучитьИмяВременногоФайла("csv");
ТД = Новый ТекстовыйДокумент;
ТД.УстановитьТипФайла(КодировкаТекста.ANSI);
ТД.ДобавитьСтроку("строка");
ТД.ДобавитьСтроку("строка2");
ТД.Записать(Ф, КодировкаТекста.ANSI);
Сообщить(Ф);

NPP показывает: Windows-1251
12 Zyka
 
22.06.17
13:20
P.S.
При открытии NPP в правом нижнем углу отображается текущая кодировка.
13 igel1969
 
22.06.17
13:25
(11) а если то же самое, но без русских букв? только на латинице?
14 Господин ПЖ
 
22.06.17
13:38
автор у тебя в руках мухи долбятся...

латинца "прозрачна" для utf-8 и ansi. там коды одинаковые
15 Zyka
 
22.06.17
13:39
Как Windows-1251 может содержать русские символы?
https://ru.wikipedia.org/wiki/Windows-1251
Блок: Кодировка Windows-1251 (синоним CP1251)

Возможно что-то путаю.
16 igel1969
 
22.06.17
13:44
ну ладно, если я все делаю как в моем куске программы, я могу сказать заказчику что файл ТОЧНО, 100% в кодировке windows-1251 ????? А его Notepad++ можно выкинуть на помойку, потому что он не умеет определять кодировку?
17 Has
 
22.06.17
14:19
может прогой Штирлиц посмотреть?
18 1dvd
 
22.06.17
14:24
(16) Точно нет русских букв? Посылай в пень. Однобайтовые кодировки все одинаковые для символов до 80h
19 бомболюк
 
22.06.17
14:38
может там BOM стоит?
20 bolder
 
22.06.17
14:46
(10) NPP показывает текущую кодировку верно.100% подтвердаю.
А вот перекодирование в нем не получится,возможно это баг или фича))Так что не гони пургу заказчику.