Имя: Пароль:
1C
 
Как в 1С преобразовать строку из юникода
0 RomaH
 
naïve
10.11.14
10:16
u0425\u0430\u0442\u043c\u0443\u043b\u043b\u0438\u043d
вот такого вида?
1 Looser-1c
 
10.11.14
10:20
руками
2 Aleksey
 
10.11.14
10:20
я через таблицу соответствий делал
3 chudishe
 
10.11.14
10:21
Никак. Используй внешние компоненты или пиши свой собственный костыль.
4 Aleksey
 
10.11.14
10:23
Функция СменитьКодировку(СтрокаНаВходе)
    СтрокаНаВыходе = СтрокаНаВходе;
    СтрокаНаВыходе = СтрЗаменить(СтрокаНаВыходе,"\u0410","А");
    СтрокаНаВыходе = СтрЗаменить(СтрокаНаВыходе,"\u0411","Б");
...
    СтрокаНаВыходе = СтрЗаменить(СтрокаНаВыходе,"\u044e","ю");
    СтрокаНаВыходе = СтрЗаменить(СтрокаНаВыходе,"\u044f","я");
    
    
    СтрокаНаВыходе = СтрЗаменить(СтрокаНаВыходе,"\u0401","Ё");
    СтрокаНаВыходе = СтрЗаменить(СтрокаНаВыходе,"\u0451","ё");
    
    СтрокаНаВыходе = СтрЗаменить(СтрокаНаВыходе,"\r\n","");//Мусор
    СтрокаНаВыходе = СтрЗаменить(СтрокаНаВыходе,"\/","/");//экранирующий символ
    СтрокаНаВыходе = СтрЗаменить(СтрокаНаВыходе,"\u0026","&");//
    
    Возврат СтрокаНаВыходе;    
КонецФункции
5 Fish
 
10.11.14
10:25
поиском не пробовал пользоваться? Вот первая же ссылка: http://infostart.ru/public/142092/
6 chudishe
 
10.11.14
10:29
(5) Фигня там написана. На каждый символ что ли мне создавать соответствие? Я бы строчку распарсил, код символа бы преобразовал в десятичную систему и подал бы на вход функции Символ().
7 chudishe
 
10.11.14
10:47
(0) (6) Вот я в общем-то и написал как сделать свой костыль. Дерзай!
8 Aleksey
 
10.11.14
10:54
(6) не взлетит
9 AnyBody
 
10.11.14
11:04
Функция Перекодировать(Стрим =  Неопределено, Стр="", изКодировки="windows-1251", вКодировку="windows-1251") Экспорт
    Результат=Стр;
    Если ((НЕ изКодировки = вКодировку)
            И (НЕ ПустаяСтрока(Стр))) Тогда
        Если Стрим = Неопределено Тогда
            Стрим = Новый COMОбъект("Adodb.Stream");
        КонецЕсли;
        Стрим.Type = 2;
      Стрим.Mode = 3;
      Стрим.charset = вКодировку;
      Стрим.Open();
      Стрим.WriteText(Стр);
      Стрим.Position = 0;
      Стрим.charset = изКодировки;
      Результат = Стрим.ReadText(-1);
      Стрим.Close();
    КонецЕсли;
  Возврат    Результат;
КонецФункции
10 mzelensky
 
10.11.14
11:09
(0) я делал по принципу (4) Создал таблицу соответствия с колонками "Символ" и "Код". Потом делаешь универсальную функцию, куда подаешь строку и на выходе получаешь раскодированную строку (принцип простой замены символов).
11 Aleksey
 
10.11.14
11:09
(9) Не взлетит u043c - это не кодировка
12 бомболюк
 
10.11.14
11:13
(0) а откуда такая строка берется?
13 Aleksey
 
10.11.14
11:14
(12) из интернета. Например всякие интернет-магазины любят в таком виде ответ выдавать
14 mzelensky
 
10.11.14
11:14
(12) Вбей в строку браузера что-нибудь на русском и увидишь :)
15 RomaH
 
naïve
10.11.14
11:22
ага
это ответ
а запрос надо в виде:
%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82
16 chudishe
 
10.11.14
11:33
(8) (13) Правда что ли, а если я сейчас напишу и проверю?
17 RomaH
 
naïve
10.11.14
11:33
18 Fish
 
10.11.14
11:36
(15) А для таких строк прекрасно подходят методы:
КодироватьСтроку и РаскодироватьСтроку.
19 chudishe
 
10.11.14
12:05
(11) Вот, я ради тебя написал и проверил.

    ИсходнаяСтрока = "\u0425\u0430\u0442\u043c\u0443\u043b\u043b\u0438\u043d";
    КодыСимволов = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИсходнаяСтрока, "\u", Истина);

    Буквы = "abcdef";

    Результат = "";
    Для каждого КодСимволаСтр Из КодыСимволов Цикл
        КодСимвола = 0;
        ДлинаКода = СтрДлина(КодСимволаСтр);
        Для Сч = 1 По ДлинаКода Цикл
            ТекСимвол = Сред(КодСимволаСтр, ДлинаКода + 1 - Сч, 1);
            Попытка
                ТекЦифра = Число(ТекСимвол);
            Исключение
                ТекЦифра = 9 + Найти(Буквы, ТекСимвол);
            КонецПопытки;
            КодСимвола = КодСимвола + ТекЦифра * Pow(16, Сч - 1);
        КонецЦикла;
        Результат = Результат + Символ(КодСимвола);
    КонецЦикла;

Прежде чем трындеть, ты бы сначала поинтересовался что такое escape-последовательность.
20 Aleksey
 
10.11.14
12:06
(19) расскажи про u0401
21 Aleksey
 
10.11.14
12:07
\u0451, А так же спецсимволы, типа \u0026
22 chudishe
 
10.11.14
12:09
(20) Что тебе рассказать? Что ты не знаешь, что такое \uXXXX и как им пользоваться? Что 0x0401 в десятичной будет 1025 и что это буква Ё в юникоде?
23 Fish
 
10.11.14
12:14
(21) Какой же \u0026 - это спецсимвол? Это обычный символ амперсанд: &
24 chudishe
 
10.11.14
12:16
Закон Брукера: Даже маленькая практика стоит большой теории.