.NET C# 从 UTF 16 LE 到 UTF 16 BE 的转换失败

.NET C# conversion from UTF 16 LE to UTF 16 BE failing

我正在尝试将一些字符串从 UTF 16 LE 转换为 UTF 16 BE,但它无法对第二个汉字进行编码。

示例字符串:test馨予

代码:

byte[] bytes = Encoding.Unicode.GetBytes(sendMsg.Text);
sendMsg.Text = Encoding.BigEndianUnicode.GetString(bytes)

我也试过了

var encode = new UnicodeEncoding(false, true, true);
var messageAsBytes = encode.GetBytes(sendMsg.Text);
var enc = new UnicodeEncoding(true, true, true);
sendMsg.Text = enc.GetString(messageAsBytes);

这会导致以下错误:无法将索引 184 处的字节 [DE][4F] 从指定的代码页转换为行上的 Unicode:

sendMsg.Text = enc.GetString(messageAsBytes);

谢谢。

字符串编码的结果是一个字节数组,而不是另一个字符串。

只需使用

byte[] bytes = Encoding.BigEndianUnicode.GetBytes(sendMsg.Text);

使用 UTF 16 BE 编码将字符串编码为字节。

然后将那些字节发送到主机。

如何将这些字节发送到大型机可能是另一个问题的主题,但听起来您需要以某种方式将这些编码字节呈现在字符串类型的变量中。这听起来像是您正在使用的库中的错误。我们需要了解该库的性质及其可能的错误才能找到解决方法。您可以尝试的一个选项是:

string toSend = Encoding.Default.GetString(bytes);

这将生成一个字符串,其中每个字符都是编码字符串中一个字节的表示形式,采用 UTF 16 BE 顺序。它的长度将是原始字符串长度的两倍。

我认为您应该使用 BigEndianUnicode class 来处理您的输入字符串。

我根据您提供的代码制作了这段代码。它工作正常,没有错误:

    String input = "馨俞";
    var messageAsBytes = Encoding.BigEndianUnicode.GetBytes(input);
    input = Encoding.BigEndianUnicode.GetString(messageAsBytes);

如果我用 Encoding.Unicode 处理 "input",并打印出两个字节数组(用 unicode 处理的一个和用 big endian 处理的一个),它显示了差异:

因此,输入已转换为您需要的字节序。

我通过设置 属性 使它工作,没有任何转换。

sendMsg.SetIntProperty(XMSC.JMS_IBM_CHARACTER_SET, 1201);