|
AnsiToOem | ☑ | ||
---|---|---|---|---|
0
SlavikSOFT2000
24.01.11
✎
11:09
|
Пробема:
Есть строка в кодировке 1С8 UTF нужно ее превратить в строку OEM В 77 была функция AnsiToOem а в 8 ее нет есть какие-нибуть идеи? (Только без работы с диском) |
|||
1
oleg_km
24.01.11
✎
11:50
|
других идей не нашел или реализовать во внешней обработке или COM-DLL. Только AnsiToOem не преобразует UTF в OEM, она преобразует ANSI в OEM
|
|||
2
SlavikSOFT2000
24.01.11
✎
12:04
|
а не хочется ужастно
|
|||
3
H A D G E H O G s
24.01.11
✎
12:07
|
Зачем?
|
|||
4
Salvador Limones
24.01.11
✎
12:08
|
Я бы предложил примерно так:
Текст = Новый ТекстовыйДокумент; Текст.УстановитьТекст(ИсхСтрока); Текст.Записать("c:\temp.txt",КодировкаТекста.OEM); Текст.Прочитать("c:\temp.txt",КодировкаТекста.ANSI); |
|||
5
Дикообразко
24.01.11
✎
12:09
|
как вариант
Встроенные функции языка (Script functions) Символ (Char) Синтаксис: Символ(<Код символа>) Параметры: <Код символа> (обязательный) Тип: Число. Код получаемого символа. Код задается в соответствии с кодировкой Unicode. Возвращаемое значение: Тип: Строка. Результирующий символ. Описание: Преобразует код символа в строку, содержащую символ. Пример: Буква_Я = Символ(1103); Встроенные функции языка (Script functions) КодСимвола (CharCode) Синтаксис: КодСимвола(<Строка>, <Номер символа>) Параметры: <Строка> (обязательный) Тип: Строка. Исходная строка. <Номер символа> (необязательный) Тип: Число. Номер символа в строке, код которого необходимо получить. Нумерация символов в строке начинается с 1. Значение по умолчанию: 1 Возвращаемое значение: Тип: Число. Код переданного символа. Код возвращается в соответствии с кодировкой Unicode. Описание: Получает код символа, расположенного в переданной строке в позиции с указанным номером. Пример: КодПервогоСимволаФамилии = КодСимвола(Сотрудник.Фамилия); |
|||
6
Дикообразко
24.01.11
✎
12:09
|
(4) и что будет?
|
|||
7
H A D G E H O G s
24.01.11
✎
12:11
|
(6) Зависит от того, что нужно автору.
Если просто строку OEM в 1С поиметь - то ничего. |
|||
8
SlavikSOFT2000
24.01.11
✎
12:11
|
(4) с записью на диск я и сам могу
в теме ж указано - "есть какие-нибуть идеи? (Только без работы с диском)" |
|||
9
H A D G E H O G s
24.01.11
✎
12:12
|
(8) Еще раз
ЗАЧЕМ |
|||
10
Salvador Limones
24.01.11
✎
12:13
|
(8) А, точняк, не заметил.
|
|||
11
Дикообразко
24.01.11
✎
12:15
|
(7) ну оно же не должно перекодировать, абракадабра же получится?
|
|||
12
SlavikSOFT2000
24.01.11
✎
12:16
|
(9) чтобы дальше передать через драйвер , а он токо оем рулит
|
|||
13
H A D G E H O G s
24.01.11
✎
12:16
|
(11) Как минимум, тогда
Текст = Новый ТекстовыйДокумент; Текст.УстановитьТекст(ИсхСтрока); Текст.Записать("c:\temp.txt",КодировкаТекста.OEM); Текст.Прочитать("c:\temp.txt",КодировкаТекста.UTF); |
|||
14
SlavikSOFT2000
24.01.11
✎
12:17
|
(7) - драйвер напрямую работает с ком портом
строки будут разные так как в них будет наименование товара |
|||
15
H A D G E H O G s
24.01.11
✎
12:17
|
(12) Смотрим (5)
|
|||
16
Дикообразко
24.01.11
✎
12:17
|
(12)
'/******************************************/ '/* Перекодировка символа */ '/******************************************/ Function CharOEMtoANSI(symbol) Dim code Dim res code=Asc(symbol) if ((code>=128) and (code<=175)) then res = Chr(code+64) elseif ((code>=224) and (code<=239)) then res= Chr(code+16) else res = symbol end if CharOEMtoANSI=res end Function '/******************************************/ Function CharANSItoOEM(symbol) Dim code Dim res code=Asc(symbol) if ((code>=176) and (code<=239)) then if(code=185) then res= Chr(code+67) else res= Chr(code-64) end if elseif ((code>=240) and (code<=255)) then res= Chr(code-16) else res= symbol end if CharANSItoOEM=res end Function '/******************************************/ '/* Перекодировка строки */ '/******************************************/ Function OEMtoANSI(st) Dim i Dim slen Dim tmp slen=Len(st) i=0 tmp="" While(i<sLen) i=i+1 tmp=tmp+CharOEMtoANSI(Mid(st,i,1)) wend OEMtoANSI=tmp end Function Function ANSItoOEM(st) Dim i Dim slen Dim tmp slen=Len(st) i=0 tmp="" While(i<sLen) i=i+1 tmp=tmp+CharANSItoOEM(Mid(st,i,1)) wend ANSItoOEM=tmp end Function '/******************************************/ перепиши в 1С, используя (5) |
|||
17
SlavikSOFT2000
24.01.11
✎
12:18
|
команд будет много - не хочется диск напрягать
|
|||
18
H A D G E H O G s
24.01.11
✎
12:18
|
Писец
Ansi<>utf Даже рядом не лежало |
|||
19
H A D G E H O G s
24.01.11
✎
12:20
|
В 1C - utf - 2 байта на символ
ANSI - Win1251 - 1 байт на символ |
|||
20
SlavikSOFT2000
24.01.11
✎
12:20
|
(16) - спс
|
|||
21
Дикообразко
24.01.11
✎
12:20
|
(13) что то мне не верится, надо проверить
|
|||
25
H A D G E H O G s
24.01.11
✎
12:22
|
||||
26
Дикообразко
24.01.11
✎
12:23
|
(23) да ну баян же страшный...
на то он и юникод, что бы с кучей таблицей кодировок не парится, поэтому 2 байта 65 535 возможных символов вместо 255 в оем и анси |
|||
27
H A D G E H O G s
24.01.11
✎
12:25
|
(26) Аутор говорит про
ansitooem() бекоуз в 7.7 не было utf, а было ansi Это - восьмерка! (Это - спарта!) Тут нужен аналог widechartomultibyte() |
|||
28
Дикообразко
24.01.11
✎
12:26
|
(27) ты гонишь... нафиг тебе вообще utf ?
|
|||
29
H A D G E H O G s
24.01.11
✎
12:27
|
Итого:
Либо 1) В файл 2) Конверъебиться с Символ() 3) Вызов АПИ widechartomultibyte() |
|||
30
H A D G E H O G s
24.01.11
✎
12:28
|
(28) Автор формирует текст в 1Сv8. Он изначально будет в utf
|
|||
31
Дикообразко
24.01.11
✎
12:29
|
(30) ога... спс, уже понял v8: Перекодировка UTF из строки -> строку 1С не используя файлы
|
|||
32
SlavikSOFT2000
24.01.11
✎
12:31
|
(16) Таки не работает к сожалению
Потому что код символа "А" - 1040 |
|||
33
Дикообразко
24.01.11
✎
12:32
|
(32) тогда это не ANSI
|
|||
34
H A D G E H O G s
24.01.11
✎
12:33
|
(32) (33)
Внезапно! |
|||
35
SlavikSOFT2000
24.01.11
✎
12:33
|
ну 1С8 всетаки блин в УТФ
|
|||
36
SlavikSOFT2000
24.01.11
✎
12:33
|
нужна тогда функция UTFtoOEM :-)
|
|||
37
Дикообразко
24.01.11
✎
12:35
|
(36) посмотри (31) там народ извращался, может что найдешь полезного
|
|||
38
Fram
24.01.11
✎
12:38
|
(0) через файл. только не каждую фразу, а все фразы одним файлом. немного больше кода, зато быстро
|
|||
39
SlavikSOFT2000
24.01.11
✎
13:46
|
проблема в том что при чтении этого файла 1С опять получает строку в UTF
а код имеет вид: Ответ = ФискальныйПринтер.command(ТекстКоманды); Как передать тогда ТекстКоманды в оем? |
|||
40
Fram
24.01.11
✎
13:56
|
(39) кусок кода выложи
|
|||
41
Fram
24.01.11
✎
13:58
|
+ (40) в смысле побольше кусок
|
|||
42
Fram
24.01.11
✎
13:59
|
и пример в каком случае печатает правильно? что напечатает, если сделать, например , так:
Ответ = ФискальныйПринтер.command("Я фискальный принтер"); |
|||
43
H A D G E H O G s
24.01.11
✎
14:05
|
Счаст все будет так,как ты захочешь.
|
|||
45
H A D G E H O G s
24.01.11
✎
14:14
|
Команда="Testing navigation system";
КомандаНаПорт=""; НакопленныйКодСимвола=0; Для Счетчик=1 По СтрДлина(Команда) Цикл КодСимволаUTF=КодСимвола(Сред(Команда,Счетчик,1)); КодСимволаOEM=СконвертироватьКодUTFвOEM(КодСимволаUTF); Если Счетчик%2=0 Тогда НакопленныйКодСимвола=НакопленныйКодСимвола+КодСимволаOEM; КомандаНаПорт=КомандаНаПорт+Символ(НакопленныйКодСимвола); НакопленныйКодСимвола=0; Иначе НакопленныйКодСимвола=НакопленныйКодСимвола+КодСимволаOEM*255; КонецЕсли; КонецЦикла; Если НакопленныйКодСимвола<>0 Тогда КомандаНаПорт=КомандаНаПорт+Символ(НакопленныйКодСимвола*255); КонецЕсли; |
|||
46
H A D G E H O G s
24.01.11
✎
14:14
|
Вот, как то так
|
|||
47
H A D G E H O G s
24.01.11
✎
14:16
|
Смысл - в Строку 1С (utf) - записать символы.
Каждый символ - это набор 2-х байт. 1 байт - это байт первого OEM символа исходной строки 2 байт - это байт второго OEM символа исходной строки |
|||
48
H A D G E H O G s
24.01.11
✎
14:17
|
Тоесть, 2 символа исходной команды помещаются в 1 символ строки 1С
|
|||
49
SlavikSOFT2000
24.01.11
✎
14:21
|
проверим щас :-)
|
|||
50
SlavikSOFT2000
24.01.11
✎
15:13
|
так не пройдет к сожалению
|
|||
51
SlavikSOFT2000
24.01.11
✎
15:13
|
не прошло тоесть
|
|||
52
Fram
24.01.11
✎
15:13
|
(50) а что на (42) выдает?
|
|||
53
H A D G E H O G s
24.01.11
✎
15:14
|
(51) Почему?
|
|||
54
Fram
24.01.11
✎
15:17
|
ну такая команда вряд ли есть конечно :) . Ну написал бы хотя бы что работает
|
|||
55
SlavikSOFT2000
24.01.11
✎
15:22
|
(53) -символы принимает - говорит Ок
как вариант возможно компонента реализована паршиво (42) - ФП не может такой текст вообще отобразить а вот например на букву "С" руск. не реагирует и все |
|||
56
H A D G E H O G s
24.01.11
✎
15:39
|
(55) ВК-шки нормально конвертят нормальный uft в ansi
Самостоятельно. Дельфи точно это делает. |
|||
57
Fram
24.01.11
✎
15:46
|
я так и не понял.. из 1С хоть какая нибудь команда срабатывает?
|
|||
58
SlavikSOFT
24.01.11
✎
16:14
|
команды не в руск раскладке а в англ - соответственно проблем нет
|
|||
59
SlavikSOFT
24.01.11
✎
16:14
|
а вот наименование товаров в русс - проблемы есть
|
|||
60
Fram
24.01.11
✎
16:18
|
(59) а вот такое проходит? "агббЄЁ©"
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |