2011-05-06 60 views
0

我有一个webservice,它将二进制数据作为字符串返回。使用C#代码如何将它存储在字节数组中?这是正确的方式吗?使用c将二进制数据字符串存储到字节数组中#

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

实际上,这没有奏效。让我更详细地解释它: Web服务代码使用utf8编码将字符串(包含XSLFO数据)转换为字节数组。在我的网络服务响应中,我只看到类似"PGZvOnJvb3QgeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIgeG1sbnM­6eGY9Imh0dHA6Ly93d3cuZWNyaW9uLmNvbS94Zi8xLjAiIHhtbG5zOm1zeHNsPSJ1c=="的数据。实际上,我想要在服务中将原始字符串值转换为byte []。不确定是否有可能?

+1

是的,您发布的代码是正确的,假设数据使用UTF8编码。 – 2011-05-06 18:27:50

+1

二进制数据格式是什么?它在Base64,UTF8还是什么?编码很重要。 – Tejs 2011-05-06 18:28:06

+0

它是UTF8。谢谢! – 2011-05-06 18:30:07

回答

11

不,这是一个坏主意。

除非输入数据是本来文本,试图使用Encoding是一个坏主意。 Web服务应该使用类似base64的东西进行编码 - 在这一点上,您可以使用Convert.FromBase64String来获取原始二进制数据。

基本上,治疗任意的二进制数据,就好像它是编码的文本是丢失数据的快捷方式。当你需要在一个字符串中表示二进制数据时,你应该使用base64,hex或类似的东西。

这可能意味着你需要更改Web服务以及,当然 - 如果它创建通过简单的处理二进制数据为UTF-8编码的文本字符串,它坏的开始。

+0

乔恩,我上面的代码没有工作。实际上,Web服务代码使用utf8编码将字符串(包含XSLFO数据)转换为字节数组。在我的web服务响应我只看到数据类似“PGZvOnJvb3QgeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIgeG1sbnM6eGY9Imh0dHA6Ly93d3cuZWNyaW9uLmNvbS94Zi8xLjAiIHhtbG5zOm1zeHNsPSJ1c ==”。实际上,我想要在服务中将原始字符串值转换为byte []。不确定是否有可能? – 2011-05-06 19:04:32

+0

@ user465876:对我来说,看起来像Base64 ...所以Convert.FromBase64String应该没问题。但如果它最初是一个字符串,为什么它会转换成一个字节数组来开始? – 2011-05-06 19:47:01

+0

它与Convert.FromBase64String一起工作。实际上,从不同的地方调用相同的Web服务,并且在大多数情况下,客户端使用字节数组。 – 2011-05-06 19:54:29

0

如果字符串是UTF8编码进行编码,然后是这是正确的方式。如果是Unicode的它是非常相似:

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

Base64Encoding有一点不同:

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

谢谢乍得。它是UTF8。 – 2011-05-06 18:30:22

相关问题