欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

Erlang转JAVA,将Erlang UTF-8编码的字符串转换为java.lang.String

发布时间:2025/3/20 编程问答 29 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。