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

时间:2010-09-13 08:02:38

标签: c# .net utf-8 character-encoding

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

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

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

那么,我是不是以丑陋的方式做事,还是在.NET的内容中有一些隐藏的byte[]方法呢?

1 个答案:

答案 0 :(得分:5)

字符串从不包含任何utf- * 或其他编码的内容;那不是他们的工作。它们是字符串 - 字符/代码点数据组。您拥有的byte[]是已编码的表单。

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

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

替代方法是将其作为byte[]抛出,并通过

手动编码
byte[] bytes=Encoding.UTF8.GetBytes(yourString);