base64和UTF-8编码问题


0

我正在写一个简单的web方法,它返回byte [],byte []由UTF-8编码。我已经调查过相关的WSDL和soap消息,似乎底层web服务栈会使用base64编码?

由于各种原因,我无法使用或重新编码从UTF-8到base64的返回字节[]。任何想法将base64编码修改为UTF-8编码?

这里是WSDL

Web服务的服务器端代码

 [WebMethod] 
     public byte[] HelloWorld2() 
     { 
      return utf8encodedbytes; 
     } 

SOAP响应

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
    <HelloWorld2Response xmlns="http://tempuri.org/"> 
     <HelloWorld2Result>base64Binary</HelloWorld2Result> 
    </HelloWorld2Response> 
    </soap:Body> 
</soap:Envelope> 

相关类型的WSDL

我相关网站的方法,SOAP消息和相关类型
xsd:base64Binary 

在此先感谢, 乔治

9

您的问题并没有真正意义上的很多恐惧 - 字节数组不用UTF-8的文本编码编码。您通常应用UTF-8编码到文本以获取字节数组。要用XML传输任意字节数组,你应该使用base64。

如果你想转移文本你应该只返回一个字符串开始。

在任何种类的编码发生之前,原始数据是什么?如果它是一个字节数组,则应该返回一个字节数组,并且XML应该自动包含base64编码的数据。如果是文本,则应返回一个字符串并让XML处理编码。


1

那么是什么阻止你使用Convert.ToBase64()Convert.FromBase64()?这些功能的确如此:将byte阵列转换为base64 string,并且反之亦然。