Имя: Пароль:
1C
1С v8
Как оптимальнее перевести юникод в ср1251
0 izekia
 
28.08.11
22:22
Написал алгоритм в 1С, вроде даже оптимизировал, но по скорости очень далеко от идеала. Есть ли что-то готовое, или нужно писать свое?
1 Aleksey
 
28.08.11
22:23
Вычесть константу
2 izekia
 
28.08.11
22:24
(1) там не константа, почитай по теме ту же википедию
3 Aleksey
 
28.08.11
22:24
КС=КодСимвола(Символ);
КС=?(КС>128,КС-848,КС);//перевод Юникод в не Юникод
4 Aleksey
 
28.08.11
22:25
(2) У тебя что вся таблица задействована? Ты бинарный текст переводишь?
5 izekia
 
28.08.11
22:26
я неправильно выразился в названии темы, нужно перевести из утф8
6 izekia
 
28.08.11
22:26
(4) что такое бинарный текст?)
7 Aleksey
 
28.08.11
22:27
(6) например исполняемый файл, т.е. там любой код может быть
8 tapapax
 
28.08.11
22:32
(0) iconv - замечательная утилита.
9 Asmody
 
28.08.11
22:59
Процедура Конвертировать(ИсходноеИмяФайла, ИсходнаяКодировка, НовоеИмяФайла, НоваяКодировка)
 ЧтениеТекста = Новый ЧтениеТекста(ИсходноеИмяФайла, ИсходнаяКодировка);
 ЗаписьТекста = Новый ЗаписьТекста(НовоеИмяФайла, НоваяКодировка);
 Стр = ЧтениеТекста.ПрочитатьСтроку();
 Пока Стр <> Неопределено Цикл
   ЗаписьТекста.ЗаписатьСтроку();
   Стр = ЧтениеТекста.ПрочитатьСтроку();
 КонецЦикла;
 
КонецПроцедуры
10 izekia
 
28.08.11
23:23
(9) и что я получу в итоге?)
11 izekia
 
28.08.11
23:26
(8) да видимо проще комобъект накидать чем команду системы каждый раз дергать
12 Asmody
 
29.08.11
00:29
(10) файл в другой кодировке
13 izekia
 
29.08.11
06:50
(!2) если я сохраню его в утф8 а прочитаю в ср1251?
я не уверен
14 popcorn
 
29.08.11
07:05
(13) если файл в УТФ8, ты его прочитаешь в УТФ-8, а потом сохранишь в 1251.
15 izekia
 
29.08.11
07:08
(12)(!4) а, да ... сорри ошибся ...
но в любом случае это не совсем то, так как мне нужно перевести просто строку, с файлами совсем неоптимально получается
16 mikeA
 
29.08.11
07:24
(15) тебе где нужно перевести, в 1С?
17 izekia
 
29.08.11
07:29
(16) да, там еще юникод в хекс варианте в виде текста
то есть буква "я" выглядит в виде такой строки: "D18F"
18 izekia
 
29.08.11
07:31
проблема в том, что если даже использовать соответствие, то все равно 1С не справляется с большим объемом ... точнее справляется, но по времени немного не то получается, что хотелось бы ... я уже 10 раз пожалел, что начал это все на 1С делать
19 mikeA
 
29.08.11
07:33
на питоне делай
20 izekia
 
29.08.11
07:36
(19) ну видимо придется сделать что-то вроде комобъекта
так как 90% кода не хочется переписывать
21 smaharbA
 
29.08.11
07:38
(17) пример строки
22 izekia
 
29.08.11
07:46
(21) 7B31362C0D0A7B0D0A7B312C312C0D0A7B2223222C22537461727461646F2031D0A13A456E746572707261697A6F227D0D0A7D2C32
23 izekia
 
29.08.11
07:47
правда это общая строка, я регуляркой выдергиваю то что нужно
но для примера подходит
24 smaharbA
 
29.08.11
07:57
это не юникод (не утф8)
25 izekia
 
29.08.11
08:02
(24) это утф8, точно
26 smaharbA
 
29.08.11
09:07
(25) Тогда как то так

ХТМЛ=Новый COMОбъект("htmlfile");
ХТМЛ.Open("text/html");
ХТМЛ.Write("<script></script>");
Это=ХТМЛ.script.eval("this");
Стр="7B31362C0D0A7B0D0A7B312C312C0D0A7B2223222C22537461727461646F2031D0A13A456E746572707261697A6F227D0D0A7D2C32";
Рез="";
Для Сч=0 По СтрДлина(Стр)/2 - 2 Цикл
   Рез=Рез+"%"+Сред(Стр,Сч*2+1,2);
КонецЦикла;
Сообщить(ХТМЛ.script.decodeURIComponent(Рез));
27 andrewks
 
29.08.11
09:18
(26) боюсь, НаСервере в линухе это не взлетит
28 smaharbA
 
29.08.11
09:22
(27) там работает какая нибудь КомандаСистемы ?
29 izekia
 
29.08.11
09:36
(26) проблема в том, что посимвольное декодирование не даст особого прироста в производительности, даже скорее здесь будет медленнее работать ... просто я составляю словарь по которому потом произвожу замену при декодировании, проблема уже на уровне 1С, так как к примеру 7% времени занимает строчка:
Если текЭлемент > 0 Тогда
30 smaharbA
 
29.08.11
09:49
(29) это не посимвольное декодирование
31 izekia
 
29.08.11
10:06
(30) сорри, поторопился ... но в любом случае операция сложения сожрет все ресурсы ... плюс длина символа в утф8 от 1-го до шести колеблется ... замена по словарю будет быстрее работать

в целом неправ с этой темой был, очевидно нужна внешняя компонента
32 izekia
 
29.08.11
10:06
спасибо всем за участие
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший