Странно, что вы используете OtpErlangString на стороне Java, когда используете символы UTF8. Я получаю объект этого типа, если я использую только символы ASCII. Если я добавлю хотя бы один символ UTF8, результирующим типом будет OtpErlangList (что логично, поскольку строки являются только списками ints в Erlang), а затем я могу использовать его метод stringValue(). Так что после отправки строки формы Erlang как:
([email protected])8> {proc, [email protected]} ! "ąćśźżęółńa".
[261,263,347,378,380,281,243,322,324,97]
На Java узел я получаю и распечатать его:
OtpErlangList l = (OtpErlangList) mbox.receive();
System.out.println(l.stringValue());
Выход правильно:
ąćśźżęółńa
Однако, если его не случай в вашей ситуации, вы можете попытаться его обработать, выставив представление OtpErlangList, например добавление пустого кортежа в качестве первого элемента списка строк:
([email protected])11> {proc, [email protected]} ! [{}] ++ "ąćśźżęółńa".
[{},261,263,347,378,380,281,243,322,324,97]
И на Java стороны что-то вроде:
OtpErlangList l = (OtpErlangList) mbox.receive();
// get rid of an extra tuple
OtpErlangObject[] strArr = Arrays.copyOfRange(l.elements(), 1, l.elements().length);
OtpErlangList l2 = new OtpErlangList(strArr);
System.out.println(l2.stringValue());
ли java.io.StringReader помочь? – Reddy
Я не вижу, как. Можете ли вы предложить способ его использования? –
моя ошибка Я думал, что OtpErlangString расширяет String. – Reddy