【问题标题】:Store binary data string into byte array using c#使用c#将二进制数据字符串存储到字节数组中
【发布时间】:2011-05-06 18:26:30
【问题描述】:

我有一个以字符串形式返回二进制数据的 Web 服务。使用 C# 代码如何将其存储在字节数组中?这是正确的方法吗?

System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
byte[] bytes = encoding.GetBytes(inputString);

实际上,这没有用。让我再解释一下: Web 服务代码使用 utf8 编码将字符串(包含 XSLFO 数据)转换为字节数组。在我的 Web 服务响应中,我只看到类似 "PGZvOnJvb3QgeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIgeG1sbnM­6eGY9Imh0dHA6Ly93d3cuZWNyaW9uLmNvbS94Zi8xLjAiIHhtbG5zOm1zeHNsPSJ1c==" 的数据。实际上,我希望在服务中将原始字符串值转换为 byte[]。不确定是否可行?

【问题讨论】:

  • 是的,你贴的代码是正确的,假设数据是用UTF8编码的。
  • 二进制数据是什么格式的?它是 Base64、UTF8 还是什么?编码很重要。
  • @user465876:你说它最初是二进制数据……什么样的?将(例如)图片视为 UTF-8 编码的字符串是一个坏主意。

标签: c# encoding byte bytearray


【解决方案1】:

不,这是个坏主意。

除非输入数据是最初文本,否则尝试使用Encoding 是个坏主意。 Web 服务应该使用 base64 之类的东西对其进行编码 - 此时您可以使用 Convert.FromBase64String 来获取原始二进制数据。

基本上,将任意二进制数据视为编码文本是一种快速丢失数据的方法。当你需要用字符串表示二进制数据时,你应该使用base64、hex或类似的东西。

当然,这可能意味着您还需要更改 Web 服务 - 如果它通过简单地将二进制数据视为 UTF-8 编码文本来创建字符串,那么它一开始就被破坏了。

【讨论】:

  • 乔恩,我上面的代码不起作用。实际上,Web 服务代码使用 utf8 编码将字符串(包含 XSLFO 数据)转换为字节数组。在我的网络服务响应中,我只看到类似“PGZvOnJvb3QgeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIgeG1sbnM6eGY9Imh0dHA6Ly93d3cuZWNyaW9uLmNvbS94Zi8xLjAiIHPSJbG5=.实际上,我希望在服务中将原始字符串值转换为 byte[] 。不确定是否可行?
  • @user465876:对我来说这看起来像 Base64 ......所以 Convert.FromBase64String 应该没问题。但是如果是原来是一个字符串,为什么要转成字节数组开头呢?
  • 它与 Convert.FromBase64String 一起使用。实际上,从不同的地方调用相同的 Web 服务,并且在大多数情况下,客户端使用字节数组。
【解决方案2】:

如果字符串以 UTF8 编码进行编码,那么是的,这是正确的方法。如果是 Unicode,则非常相似:

System.Text.Unicode encoding = new System.Text.Unicode();
byte[] bytes = encoding.GetBytes(inputString);

Base64Encoding 有点不同:

byte[] bytes = Convert.FromBase64String(inputString);

【讨论】:

    猜你喜欢
    • 2012-05-08
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    • 2013-07-17
    • 1970-01-01
    • 2017-09-06
    相关资源
    最近更新 更多