SAPфорум.RU
https://sapboard.ru/forum/

Перекодировка части XML в base64
https://sapboard.ru/forum/viewtopic.php?f=70&t=90807
Страница 2 из 2

Автор:  Chaser009 [ Вт, июн 14 2016, 04:20 ]
Заголовок сообщения:  Re: Перекодировка части XML в base64

Здравствуйте!

Разбираться, конечно, тяжело, ибо я пользуюсь стандартными классами, но, чисто навскидку (по аналогии с кодированием):

byte data[] = x.getBytes("UTF-8");

Может, так поможет? У меня, во всяком случае, нормально русский текст кодирует/декодирует.
Хотя, при декодировании без разницы должно быть.

Скорее, вот тут можно попробовать:

return new String(dest, "UTF-8");

P.S. Странно вообще-то. Специально проверил у себя в графическом мэппинге - кодирование и декодирование нормально распознает русский язык без всяких дополнительных параметров.

Автор:  mediaman [ Вт, июн 14 2016, 11:23 ]
Заголовок сообщения:  Re: Перекодировка части XML в base64

Вы пробовали именно тот код который я привел?

Попробовал вашу рекомендацию, но не дает даже активировать изменение пишет ошибка в коде:
11:20:44 Start of test
Source code has syntax error: /sapVPQ/usr/sap/VPQ/DVEBMGS12/j2ee/cluster/server0/./temp/classpath_resolver/Mape915edc0320811e6b360000007a655ca/source/com/sap/xi/tf/_DecodeBase64_.java:92: unreported exception java.io.UnsupportedEncodingException; must be caught or declared to be thrown return new String(dest, "UTF-8"); ^ 1 error
:?

Автор:  Chaser009 [ Вт, июн 14 2016, 14:33 ]
Заголовок сообщения:  Re: Перекодировка части XML в base64

Код именно ваш, правда, PI 7.4.
А ошибка потому, что при добавлении в конструктор строки "UTF-8" нужно обернуть его в try...catch, как в первом коде.

Автор:  mediaman [ Вт, июн 14 2016, 16:10 ]
Заголовок сообщения:  Re: Перекодировка части XML в base64  Тема решена

Вы просто мега!!!, я весь мозг сломал :roll: Спасибо огромное!

Все работает, русский язык теперь не проблема)

Вот итоговый код:
Code:
       try {
        if (x == null)  return  null;
        byte data[] = x.getBytes();

        int tail = data.length;
        while (data[tail-1] == '=')  tail--;
        byte dest[] = new byte[tail - data.length/4];

        // ascii printable to 0-63 conversion
        for (int idx = 0; idx <data.length; idx++)
        {
          if (data[idx] == '=')    data[idx] = 0;
          else if (data[idx] == '/') data[idx] = 63;
          else if (data[idx] == '+') data[idx] = 62;
          else if (data[idx] >= '0'  &&  data[idx] <= '9')
            data[idx] = (byte)(data[idx] - ('0' - 52));
          else if (data[idx] >= 'a'  &&  data[idx] <= 'z')
            data[idx] = (byte)(data[idx] - ('a' - 26));
          else if (data[idx] >= 'A'  &&  data[idx] <= 'Z')
            data[idx] = (byte)(data[idx] - 'A');
        }

        // 4-byte to 3-byte conversion
        int sidx, didx;
        for (sidx = 0, didx=0; didx < dest.length-2; sidx += 4, didx += 3)
        {
          dest[didx]   = (byte) ( ((data[sidx] << 2) & 255) |
                  ((data[sidx+1] >>> 4) & 3) );
          dest[didx+1] = (byte) ( ((data[sidx+1] << 4) & 255) |
                  ((data[sidx+2] >>> 2) & 017) );
          dest[didx+2] = (byte) ( ((data[sidx+2] << 6) & 255) |
                  (data[sidx+3] & 077) );
        }
        if (didx < dest.length)
        {
          dest[didx]   = (byte) ( ((data[sidx] << 2) & 255) |
                  ((data[sidx+1] >>> 4) & 3) );
        }
        if (++didx < dest.length)
        {
          dest[didx]   = (byte) ( ((data[sidx+1] << 4) & 255) |
                  ((data[sidx+2] >>> 2) & 017) );
        }

         return new String(dest, "UTF-8");

} catch (UnsupportedEncodingException e) {
             throw new RuntimeException("cannot convert to UTF: " + e.getMessage());
      }


Премного благодарен!

Автор:  Chaser009 [ Вт, июн 14 2016, 17:00 ]
Заголовок сообщения:  Re: Перекодировка части XML в base64

Рад, что все получилось, коллега! ☺

Страница 2 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/