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 |
Вы просто мега!!!, я весь мозг сломал Спасибо огромное! Все работает, русский язык теперь не проблема) Вот итоговый код: 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/ |