Erlang转JAVA,将Erlang UTF-8编码的字符串转换为java.lang.String
Java節點接收以UTF-8編碼的Erlang字符串.它的類類型是OtpErlangString.如果我只是執行.toString()或.stringValue(),則生成的java.lang.String具有無效的代碼點(基本上,Erlang字符串中的每個字節都被視為不同的字符).
現在,我想在創建Java String時使用新的String(字節,“UTF-8”),但是如何從OtpErlangString中獲取字節?
解決方法:
當您使用UTF8字符時,在Java端獲得OtpErlangString是很奇怪的.如果我只使用ASCII字符,我會得到這種類型的對象.如果我添加至少一個UTF8字符,結果類型是OtpErlangList(這是邏輯的,因為字符串只是Erlang中的int列表)然后我可以使用它的stringValue()方法.這樣在發送字符串形式之后Erlang就像:
(waco@host)8> {proc, java1@host} ! "??????ó?ńa".
[261,263,347,378,380,281,243,322,324,97]
在Java節點上,我收到并打印它:
OtpErlangList l = (OtpErlangList) mbox.receive();
System.out.println(l.stringValue());
輸出是正確的:
??????ó?ńa
但是,如果在您的情況下不是這種情況,您可以嘗試通過例如強制OtpErlangList表示來解決它.添加一個空元組作為字符串列表的第一個元素:
(waco@wborowiec)11> {proc, java1@wborowiec} ! [{}] ++ "??????ó?ń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,unicode,erlang,utf-8,jinterface
來源: https://codeday.me/bug/20190709/1416938.html
總結
以上是生活随笔為你收集整理的Erlang转JAVA,将Erlang UTF-8编码的字符串转换为java.lang.String的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php中的装饰,详解PHP装饰模式的示例
- 下一篇: php小结,PHP编程小结