将UTF-8字符串放在string类型的变量中

mlu*_*udd 1 .net c# utf-8 character-encoding

好吧,对于令人困惑的标题感到抱歉,但我在C#.NET中的字符编码问题上有点烦人

我有一堆从WSDL文件生成的类,这些类有一些方法,它们接受字符串参数,然后提交给远程Web服务.此远程Web服务要求所有文本输入都是UTF-8编码的.现在,据我所知,真的没有办法在C#.NET UTF-8编码中创建一个字符串,它是UTF-16或什么都没有,如果我想要UTF-8我必须把它变成一个byte[],对吗?

所以,我的一个大问题是,我应该如何将原始UTF-8 byte[]数据放入字符串中,以便将其实际提交给Web服务?我的意思是,当然,我可能会依赖于C风格的代码,逐字循环整个事情,但在设计语言和API时,微软肯定已经考虑过这一点了吗?(虽然我的Vista笔记本电脑认为在内部使用UTF-16完全没问题,cp1252用于某些东西,UTF-8用于其他一些和cp850(!)用于其他一些东西我不会太惊讶,如果他们没有) .

那么,我是不是以丑陋的方式做事还是System.Text.EncodeStuffTherightWay.EncodeStringAsUTF8(string)在.NET的内容中有一些隐藏的方法?

Mar*_*ell 5

字符串从不包含任何utf-*或任何其他编码的东西 ; 那不是他们的工作.它们是字符串 - 字符/代码点数据组.在byte[]你已经是编码形式.

在我能想到的几乎任何情况下,运输等都应该为你做这件事.如果不是那么听起来像是wsdl或web-service堆栈本身的错误.

请记住,wsdl本身只是xs:string- 如果这还不够(即与握手相结合是不够的),那么它根本就不是一个Web服务字符串.

另一种方法是将其作为a byte[],将其手动编码

byte[] bytes=Encoding.UTF8.GetBytes(yourString);
Run Code Online (Sandbox Code Playgroud)