【问题标题】:How to get the exact bytes?如何获得确切的字节?
【发布时间】:2017-04-25 08:42:04
【问题描述】:

我想发送一封正文中包含 9 个特定字节的电子邮件:

byte one = (byte) 161;
byte two = (byte) 1;
byte three = (byte) 254;
byte four = (byte) 1;
byte five = (byte) 255;
byte six = (byte) 255;
byte seven = (byte) 255;
byte eight = (byte) 254;
byte nein = (byte) 255;

String unicode = new String(new byte[] { one, two, three, four, five, six, seven, eight, nein }, "windows-1258");
emailMessage.setText(unicode);

每次我发送这些字节时,又有 9 个字节到达目的地。我怎样才能做到这一点?

接收者的字符串编码对我来说并不重要。我对角色的视觉显示方式不感兴趣。我更关心的是信息,字符中的十六进制值。

【问题讨论】:

  • 我认为 9 不是 nein - 用于一般信息
  • 你检查过 MSB、LSB、填充吗?
  • 你试过检查接收者字符串编码吗?
  • 接收者的字符串编码对我来说并不重要。我对角色的视觉显示方式不感兴趣。我更关心的是信息,字符中的十六进制值。
  • 电子邮件不支持发送二进制数据。您必须将二进制文件编码为文本,以便发送时不会损坏。

标签: java android smtp


【解决方案1】:

有一个比较好的解释here或者你可以自己阅读RFC 1341。

基本上,电子邮件中只允许使用 7 位 US-ASCII 字符(未编码)。其他任何内容(包括您的二进制字节)都必须使用某种编码进行编码。这会将您的 9 个字节转换为 9 个以上的字节(取决于选择的编码)。

电子邮件 (SMTP) 不是二进制协议。您可以通过电子邮件发送二进制数据,但这基本上是一种 hack。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-06
    • 2011-02-13
    相关资源
    最近更新 更多