base64和UTF-8编码问题

时间:2009-02-22 14:09:56

标签: c# encoding utf-8 base64

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

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

这是我在WSDL中的相关Web方法,SOAP消息和相关类型

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中的相关类型

xsd:base64Binary
提前谢谢, 乔治

2 个答案:

答案 0 :(得分:9)

我担心你的问题并没有多大意义 - 字节数组不是用UTF-8等文本编码编码的。您通常将UTF-8编码应用于 text 以获取字节数组。要以XML格式传输任意字节数组,您应该使用base64。

如果您想传输文本,您应该只返回一个字符串以开始。

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

答案 1 :(得分:1)

那么是什么阻止您使用Convert.ToBase64()Convert.FromBase64()?这些函数完全相同:将byte数组转换为base64 string s,反之亦然。