@jvmchat

Страница 1529 из 2890
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 сервис. Я посылаю пост запрос, а из-за того, что в теле есть русские символы, он их некорректно кодирует, и запрос ломается. Да и в ответе кириллица тоже есть, неплохо бы ответ читать.

Кодировать кириллическую строку в UTF-8, и раскодировать в cp1251 — это значит гарантированно её испортить. Но зачем же так делать?
Пробовал и обратно, вроде не спасло. Или я что делал не так. Понимаю, что делаю все не так, но решение в гугле почему-то не находится. Не понимаю, почему у меня нормально русские символы нельзя закодировать в юникод.

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?

Friedrich
06.06.2017
07:13:24
что страшного в rhino?
Тормоза там страшные :)

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

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

Google
Knock
06.06.2017
08:06:40
Да, должно. Если ты знаешь, что массив закодирован в cp1251, то тебе нужно его декодировать в строку с использованием этой кодировки.
Похоже не совсем в cp1251. Попробовал вот так, но все равно получил крякозябли. Пытаюсь вот так, но крякозябли это почему-то не решает. var tmp = new java.lang.String(rawData).getBytes("CP1251"); var outData = new java.lang.String(tmp);

Макс
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
var tmp = new String(rawData, "CP1251");
Вроде так не выходило, сейчас попробую.

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
Какой такой "типа стринг", какого художника он стринг?
Как тогда я могу от него получить getBytes?

Если он не стринг.

Ничего не понимаю.

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

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

Friedrich
06.06.2017
08:10:16
Как тогда я могу от него получить getBytes?
В твоём коде не было вызова rawData.getBytes().

Поэтому мы решили, что 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
Если нет, то поясни, что это за объект.

>var tmp = new java.lang.String(rawData).getBytes("CP1251");
И какого тут типа rawData?

Knock
06.06.2017
08:11:31
И какого тут типа rawData?
Похоже на string. Но это rhino. Я не знаю, как он обрабатывается внутри жавы.

Вроде должен в стринге.

если бы не в стринге, у меня бы часть методов, где используется тип стринг, ругалась бы

Friedrich
06.06.2017
08:11:54
Похоже на string. Но это rhino. Я не знаю, как он обрабатывается внутри жавы.
Чем похоже на string? Мне кажется похоже на байтовый массив. Ты ж его передаёшь в конструктор строки.

Короче, разберись там у себя!

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

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

Knock
06.06.2017
08:13:55
Так он может вызывать String(String).
А кстати так реально можно. Или все-таки у меня там байтовый массив, как и сказали вые.

выше

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

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

Knock
06.06.2017
08:16:18
Да, это похоже на байтовый массив.
просто если я делаю принт rawData, то он выводит просто строку лол

Google
Friedrich
06.06.2017
08:16:37
Т.е. мое getBytes вообще ни к чему?
У тебя вообще код неправильный. Сделай как написали выше.

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
>var outData = new String(rawData, "CP1251");
Тебя тут String не смущает? Наверное, надо же java.lang.String? Раньше ты писал именно так.

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

Всё, в момент предыдущей конвертации информация была утеряна.
В смысле предыдущей? Т.е. сразу же как переменная оказалась в памяти, что ли?

Есть варик вручную просто забить юникод строку, лол. Так работает.

Но когда я буду получать ответ от сервера, то у меня та же проблема будет.

Страница 1529 из 2890