gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 03:43:27 25 4
gpt4 key购买 nike

Java 节点接收到以 UTF-8 编码的 Erlang 字符串。它的类类型是OtpErlangString。如果我简单地执行 .toString().stringValue() 结果 java.lang.String 有无效的代码点(基本上每个字节从Erlang 字符串被认为是不同的字符)。

现在,我想在创建 Java 字符串时使用 new String(bytes, "UTF-8") 但如何从 OtpErlangString 获取字节?

最佳答案

当您使用 UTF8 字符时,您在 Java 端得到 OtpErlangString 很奇怪。如果我只使用 ASCII 字符,我会得到这种类型的对象。如果我添加至少一个 UTF8 字符,则生成的类型为 OtpErlangList(这是合乎逻辑的,因为字符串只是 Erlang 中的整数列表),然后我可以使用它的 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 - 将 Erlang UTF-8 编码的字符串转换为 java.lang.String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8878330/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com