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