
Friedrich
06.06.2017
06:44:57
Ну а почему тебя это вообще должно волновать, как оно там организовано под капотом у JVM?
Ты спросил, как заенкодить кириллицу, чтоб латиница осталась однобайтовой. Я тебе говорю — энкодь в UTF-8.
У JVM внутри это всё устроено достаточно хитро, и, если сильно захотеть, можно даже большой текст попытаться хранить с учётом преимуществ CompressedStrings.
Но зачем? У тебя по памяти для JVM ограничение? Или кодирование всё-таки было бизнес-требованием?

Google

Knock
06.06.2017
06:49:12
Пытался. Getbytes(utf-8), потом new string(cp1251), но не зашло. Другая кодировка, возможно? Прошу прощения что пишу методы без классов, я сейчас с телефона.

Anton
06.06.2017
06:50:12

Friedrich
06.06.2017
06:50:23
Попробуй пояснить, что на самом деле нужно!
Кодировать кириллическую строку в UTF-8, и раскодировать в cp1251 — это значит гарантированно её испортить. Но зачем же так делать?

Knock
06.06.2017
06:52:10
Ну у меня там soap сервис. Я посылаю пост запрос, а из-за того, что в теле есть русские символы, он их некорректно кодирует, и запрос ломается. Да и в ответе кириллица тоже есть, неплохо бы ответ читать.

Friedrich
06.06.2017
06:56:15
Ну и обратно, соответственно, тоже раскодировать из этой кодировки.

Knock
06.06.2017
06:58:28
А, дошло что не так. Т.е. Я получаю байтовый массив в cp1251, потом вновь превращаю его в строку cp1251, и так должно у меня наконец взлететь?

Friedrich
06.06.2017
06:59:15
Да, должно. Если ты знаешь, что массив закодирован в cp1251, то тебе нужно его декодировать в строку с использованием этой кодировки.

Knock
06.06.2017
06:59:47
Неприятно чувствовать себя дураком лол
Спасибо!

Google

Friedrich
06.06.2017
07:01:14
Ничего страшного. Главное, что проблема разрешилась. А уж как там чего с кодировками — это ты ещё успеешь научиться.

Knock
06.06.2017
07:04:26
Да жуть. Там это не самое страшное. Не сталкивался никогда с rhino?

Ivan
06.06.2017
07:05:18
что страшного в rhino?

Maks
06.06.2017
07:09:29

Friedrich
06.06.2017
07:13:24
Nashorn намного быстрее работает.
(ну, если это про того Rhino, про которого я подумал)

Ivan
06.06.2017
07:15:40
в свое время ничего другого не было
пользовались rhino
я знаю банковский софт стабильно работающий на rhino

Knock
06.06.2017
07:21:23
Мне лично не очень понравилось. Там еще есть странная проблема, что он может вместе методов джавы пытаться вызвать свои и выдавать ошибку, что в классе нет такого метода, насколько я об этом читал.

Дарья
06.06.2017
07:33:43
Ребят, всем привет!
А сюда могу выложить вакансию по джависту?

Igor
06.06.2017
07:34:21
есть другая ветка для вакансий
https://telegram.me/proJVM/132
нее
https://t.me/jvmjobs

guga
06.06.2017
07:37:43

Дарья
06.06.2017
07:38:12
спасибо большое))

Google

Knock
06.06.2017
08:06:40

Friedrich
06.06.2017
08:06:57

Макс
06.06.2017
08:07:34
var tmp = new String(rawData, "CP1251");

Friedrich
06.06.2017
08:07:50

Knock
06.06.2017
08:08:12

Gregory
06.06.2017
08:08:25
new String(bytes) - это создаёт строку в дефолтной кодировке.

Friedrich
06.06.2017
08:08:34
Так _должно_ получаться, если rawData — байтовый массив.

Knock
06.06.2017
08:08:58
Он типа стринг же

Friedrich
06.06.2017
08:09:11

Gregory
06.06.2017
08:09:11
rawData - это что?

Friedrich
06.06.2017
08:09:20
Какой такой "типа стринг", какого художника он стринг?

Макс
06.06.2017
08:09:39
Значит надо раньше парсить байты в нужной кодировке

Knock
06.06.2017
08:09:45
Если он не стринг.
Ничего не понимаю.

Макс
06.06.2017
08:09:59
У строки то по сути кодировки уже нет

Knock
06.06.2017
08:10:08
Хотя почему и нет.

Friedrich
06.06.2017
08:10:16
Поэтому мы решили, что rawData — байтовый массив.

Google

Knock
06.06.2017
08:10:29
>var tmp = new java.lang.String(rawData).getBytes("CP1251");

Friedrich
06.06.2017
08:10:33
Если нет, то поясни, что это за объект.

Knock
06.06.2017
08:11:31
Вроде должен в стринге.
если бы не в стринге, у меня бы часть методов, где используется тип стринг, ругалась бы

Friedrich
06.06.2017
08:11:54
Короче, разберись там у себя!

Knock
06.06.2017
08:12:18
жуть.

Gregory
06.06.2017
08:12:29

Friedrich
06.06.2017
08:12:38
Значит, ему строку уже кто-то криво раскодировал. Чревато потерей данных :(

Knock
06.06.2017
08:13:55
выше
Если сделать принт переменной с байтовым массивом, то он выводит вот такое? Это же адрес на первый байт массива, я прав?
[B@4b6287b3

Friedrich
06.06.2017
08:15:44

Gregory
06.06.2017
08:15:57
Нет, но это подтверждает, что rawData - массив байтов.

Friedrich
06.06.2017
08:16:14

Knock
06.06.2017
08:16:18

Google

Friedrich
06.06.2017
08:16:37
var tmp = new String(rawData, "CP1251");

Knock
06.06.2017
08:17:31
Я сделал так
>var outData = new String(rawData, "CP1251");

Nikolay
06.06.2017
08:17:49

Friedrich
06.06.2017
08:18:20

Knock
06.06.2017
08:18:59
окей, попробуем так.
а вот теперь прекол
>org.mozilla.javascript.EvaluatorException: Java constructor for "java.lang.String" with arguments "string,string" not found. (<Unknown source>#29) in <Unknown source> at line number 29
Я же говорю, что это стринг

Friedrich
06.06.2017
08:20:04
Тогда надо чинить, шоб был массив байтов.

Knock
06.06.2017
08:20:16
Так ведь получается я правильно перегонял в массив байтов?

Макс
06.06.2017
08:20:57
Нет
Не надо перегонять String -> byte[] -> String

Knock
06.06.2017
08:21:23
А как тогда? Давайте все-таки учтем, что rawData точно стринг.

Friedrich
06.06.2017
08:21:30
Неправильно, что это строка.
Всё, в момент предыдущей конвертации информация была утеряна.

Knock
06.06.2017
08:22:02
Призываются любители rhino
Есть варик вручную просто забить юникод строку, лол. Так работает.
Но когда я буду получать ответ от сервера, то у меня та же проблема будет.