c# - 将 UTF-8 字符串放入字符串类型的变量中

标签 c# .net 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(!)用于其他一些东西,如果他们不这样做我也不会太惊讶) .

那么,我是坚持以丑陋的方式做事,还是在 .NET 的深处有一些隐藏的 System.Text.EncodeStuffTherightWay.EncodeStringAsUTF8(string) 方法?

最佳答案

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

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

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

另一种方法是将其作为 byte[] 进行处理,并通过

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

关于c# - 将 UTF-8 字符串放入字符串类型的变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3698696/

相关文章:

.net - RESTful 身份验证。客户端无状态身份验证

.net - SPI_GETMOUSEHOVERTIME 可以为零吗?

.net - 如何从子表单触发父表单事件?

java - 如何使用 Apache HTTP 客户端获取像 "http://ньюбаланс.рф"这样的西里尔域名?

android - 如何比较android中的文本UTF-8?

c# - 当我需要为所有表单重载方法时如何保持 DRY?

c# - 如何在我的 ASP.NET MVC 编辑页面中绑定(bind)多个下拉菜单?

php - 确保 PHP 中的有效 UTF-8

c# - 加载 BitmapSource 并在 WPF -> IOException 中使用相同的名称保存

c# - 在 C# 中使用接口(interface)作为泛型类的类型参数,限制为 "class"