Имя: Пароль:
1C
1C 7.7
v7: Кодировка дурит (Объект Текст)
,
0 Эльниньо
 
22.08.18
16:30
Windows 10

Т = СоздатьОбъект("Текст");
Т.ДобавитьСтроку(Стр);
Т.Записать(СокрП(Константа.КаталогФТПСервера) + "\" + НЗП.НомерДок + ".onec");

Создаёт файлы в кодировках Windows-1251, Windows-1252, Windows-1255.
Создал 8 файлов.
Из них вWindows-1251 - 5
в Windows-1252 - 2
в Windows-1255 - 1

Что это может быть?
1 Сияющий в темноте
 
22.08.18
16:32
При перекодировании из двухбайтовой кодировки в однобайтовую используется информация о текущей раскладке клавиатуры - то есть если РУС, то будет Windows-1251, если LAT - то Windows-1252 остальных, вроде бы, быть не должно.
2 Эльниньо
 
22.08.18
16:36
(1) Спасибо. Но ... при каком раскладе 1255 получается
3 Эльниньо
 
22.08.18
16:49
(1) Попробовал. 1 файл создал в РУС, другой в ENG.
Оба записались в 1251
Толи древнии клюшки плохо с 10-кой дружат, толи... скорее бы пятница, банька и болт на ЗОЖ
4 trad
 
22.08.18
16:52
а по каким признакам ты понимаешь что 1251/1252/1255 ?
5 Сияющий в темноте
 
22.08.18
17:02
Не забываем, что отображение Unicode->Ansi необратимо, и большое множество символов Unicode могут отображаться в один единственный символ в однобайтовой кодировке.
Кроме того, возможно, что у вас кодировка правленая в реестре, из-за чего может получаться кривое её опознание текстовым редактором, который её открывает.
Попробуйте все записанные файлы явно открыть в Windows-1251 и посмотреть, что там будет.
6 Franchiser
 
гуру
22.08.18
17:04
Пиши через  OpenTextFile()
7 Сияющий в темноте
 
22.08.18
17:11
(6) Там, кстати, будет тоже самое, так как или писать в Unicode (а как потом читать) или то же самое преобразование, только ещё и несколько раз - сначала OneByte->DoubleByte при передаче строки в метод Write, когда он вызывается из 1С, а потом обратно DoubleByte->OneByte при записи текста, а если символ не найдётся, то можно словить исключение.
8 Эльниньо
 
22.08.18
17:12
Попробовал V7TextFile и fso.CreateTextFile.
Та же хрень. То 1251, то 1252
9 Эльниньо
 
22.08.18
17:16
(4) Far показывает. Да и принимающая сторона гневные скриншоты шлёт
10 Сияющий в темноте
 
22.08.18
17:17
Попробуй в реестре
HKEY_LOCAL_MACHINE\ SYSTEM\ CurrentControlSet\Control\ Nls\ CodePage
Прописать ACP => 1251.
Может, поможет.
11 Сияющий в темноте
 
22.08.18
17:18
Что ты там такого передаёшь ?
Русский текст 1С никогда не гадила.
12 Эльниньо
 
22.08.18
17:22
(11) Вот это вот записалось в 1252
id##
idonec##0495Ê06605
status##status
total##5914.2
creator##95001656
customer##95001656
manager##0
company##00001
date-create##01.04.18 06:00:00
date-status##                
canceled##N
comment##
manager-comment##
order-fields##
basket##ID4515:1:4701.9;ID4508:1:1347
store##4-002

а вот это:

id##212634
idonec##1195Т01687
status##status
total##15581
creator##00011
customer##00011
manager##58691
company##95001
date-create##01.04.18 06:00:00
date-status##                
canceled##N
comment##
manager-comment##Заказчик: Санкт-Петербург          [email protected]     Александр     +7 (921) 956-6692     /68475-1.0000шт(15581р)
order-fields##
basket##ID68475:1:15581
store##95001

в 1251
13 Эльниньо
 
22.08.18
17:25
(10) Там 1251
14 vova1122
 
22.08.18
17:27
(12) в первом примере нет русских букв, а во втором есть. Может дело в этом?
15 Сияющий в темноте
 
22.08.18
17:27
idonec##0495Ê06605 - вот это что за символ и откуда - его в Windows 1251 просто нет - и здесь нет ни одного символа в Windows-1251, я так понимаю, что они превратились в пробелы.

А текст сам формируется в 1С или получается откуда-то (например, из базы данных по OLE и т.п.) ?
16 Сияющий в темноте
 
22.08.18
17:28
Очень похоже, что "умная" Windows сама определяет кодировку по первому символу выше Ascii, а потом в неё конвертит весь файл.
17 Эльниньо
 
22.08.18
17:30
(15) Это символ К (русская) так в 1252 записывается
18 Эльниньо
 
22.08.18
17:31
(16) Вот и я думаю, что разрабы клюшек в середине 90-х не рассчитывали на такую умную винду.
Но мне от этого не легче
19 Сияющий в темноте
 
22.08.18
17:31
(17) Выбери в Far-е явно кодировку Windows-1251 и открой этот файл. Он у тебя записан правильно, просто Far не может определить кодировку, так как нет русских слов.
20 Сияющий в темноте
 
22.08.18
17:32
В открытом на просмотр файле в Far нажать Shift+F8 и выбрать кодировку.
21 Сияющий в темноте
 
22.08.18
17:33
Далее, что не устраивает получателя файла ? Или он тоже в Far-е принимает ?
22 Эльниньо
 
22.08.18
17:40
(21) Были файлы, которые выгрузились в 1255
И...!
В Фаре по Shift+F8 в списке кодировок не 1251
1250 и сразу после неё 1252
23 Эльниньо
 
22.08.18
17:41
(22) "не 1251" = "нет 1251"
24 Сияющий в темноте
 
22.08.18
17:45
У тебя в Far-е вверху список кодировок System, там 866 и 1251, а остальные в списке.
25 Эльниньо
 
22.08.18
17:48
(24) Посмотрел файл, записавший в 1252 в кодировке 1251.
Кразозябры стали буквами
26 Сияющий в темноте
 
22.08.18
17:50
(25) Я тебе об этом и говорю, что тупит Far.
27 Сияющий в темноте
 
22.08.18
17:51
Вот простой сценарий на VbScript, который выводит коды символов из файла - можно смотреть, что там было.

Set Fso=CreateObject("Scripting.FileSystemObject")
Set a=WScript.Arguments
If a.Length<>2 Then
    WScript.Echo "Неверное число аргументов:" & CStr(a.Length)
    WScript.Quit
End If
Set r=Fso.OpenTextFile(a.Item(0),1,False,False)
Set w=Fso.CreateTextFile(a.Item(1),False,False)
q=0
Do
    If r.atEndOfStream=True Then Exit Do
    s=r.Read(1)
    k=Asc(s)
    w.Write CStr(k)
    q=q+1
    If q<16 Then
        w.Write vbTab
    Else
        w.Write vbCrLf
        q=0
    End If
Loop
w.Close
r.Close
WScript.Echo "Выполнено" & a.Item(0) & "=>" & a.Item(1)