【问题标题】:Putting UTF-8 string in variable of type string将 UTF-8 字符串放入字符串类型的变量中
【发布时间】: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


【解决方案1】:

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

在我能想到的几乎任何情况下,运输等都应该已经为您完成了。如果不是,那么这听起来像是 wsdl 或 Web 服务堆栈本身的错误。

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

另一种方法是将其作为byte[] 扔掉,并通过手动编码

byte[] bytes=Encoding.UTF8.GetBytes(yourString);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2014-03-07
    • 2017-03-04
    • 2015-01-19
    相关资源
    最近更新 更多