|
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) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |