【发布时间】:2011-04-11 13:15:57
【问题描述】:
好吧,对于令人困惑的标题,我很抱歉,但我在 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(!)用于其他一些东西,如果他们不这样做我不会太惊讶) .
那么,我是坚持以丑陋的方式做事,还是在 .NET 的内部深处有一些隐藏的 System.Text.EncodeStuffTherightWay.EncodeStringAsUTF8(string) 方法?
【问题讨论】:
-
编码只是一种表示形式。这就像实现“unicode”接口的东西的实现细节。是否有特定原因需要使用 UTF-8?优化(防止 UTF-8 => UTF-16 => UTF-8)?
-
这取决于您连接到服务的方式,但除非这是非常低的级别,否则如果这是您需要关注的问题,我会感到非常惊讶。
-
嗯,外部服务只允许某些字符,并且必须是 UTF-8 编码的。而且由于我调用来访问此服务的方法需要一个字符串变量(从不时更改的 WSDL 文件生成,所以我不想弄乱这些类),那么我需要找出一种方法来放置 UTF-8 - 将文本编码为字符串变量。
-
你在使用 WCF 吗?如果是这样,您可以在绑定上设置
textEncoding属性。见:msdn.microsoft.com/en-us/library/ms731361.aspx -
Greg:我只是使用 wsdl.exe 生成的一堆类,所以没有 WCF(另外,这是 .NET 2.0,IIRC WCF 甚至不适用于 .NET 版本
标签: c# .net utf-8 character-encoding