有点令人困惑,但这里有一些采样代码:
[OperationContract] [WebInvoke(Method = "GET",BodyStyle = WebMessageBodyStyle.Bare,ResponseFormat = Webmessageformat.Json,UriTemplate = "/TestGetUser")] TestGetUserResponse TestGetUser(); /* ... */ [DataContract(Namespace = "http://schema.mytestdomain/",Name = "TestGetUser")] public class TestGetUserResponse { [DataMember] public User User { get; set; } [DataMember] public Error Error { get; set; } }
而TestGetUser是:
public TestGetUserResponse TestGetUser() { WebClient client = getCredentials(); // getCredentials() method is defined elsewhere string apiUrl = "http://my.api.url.com/API"; string apiRequest = "<?xml version='1.0' encoding='utf-8' ?><test>My XML Request Lives Here</test>"; string result = client.UploadString(apiUrl,apiRequest); XmlDocument user = new XmlDocument(); user.LoadXml(result); userNode = user.SelectSingleNode("/my[1]/xpath[1]/user[1]"); return new TestGetUserResponse { Error = new Error(),User = new User { Name = userNode.SelectSingleNode("name[1]").InnerText,Email = userNode.SelectSingleNode("email[1]").InnerText,ID = System.Convert.ToInt32(userNode.SelectSingleNode("id[1]").InnerText) } }; }
所以,当我从浏览器点击我的URL时,它会返回一个JSON字符串,如下所示:
{ "Error": { "ErrorCode": 0,"ErrorDetail": null,"ErrorMessage":"Success" },"User": { "Name": "John Smith","Email": "john.smith@example.com","ID": 12345 } }
现在,我的问题是,有时返回的字符串(直接来自API)是一个编码严重的UTF-8字符串(我想?我可能会有点错误).例如,我可能会回来:
{ "Error": { "ErrorCode": 0,"User": { "Name": "Jose Nuñez","Email": "jose.nunez@example.com","ID": 54321 } }
注意User对象下的Name属性中的Ã.
我的问题是,如何将这个编码不正确的字符串转换为ñ,它应该是什么?
我找到了很多帖子
> Strange Characters in database text: Ã,Ã,¢,â‚ €,
> How to convert these strange characters? (ë,ì,ù,Ã)
> C# UTF8 Decoding,returning bytes/numbers instead of string
> Decode a =?utf-8?B?…?= string in C#
> How to convert (transliterate) a string from utf8 to ASCII (single byte) in c#?
>最重要的是C# Convert string from UTF-8 to ISO-8859-1 (Latin1) H
但似乎没有一个正是我所需要的,或试图借用这些帖子都失败了.
所以,尽可能提出我的问题,
如果我在C#(.NET 3.5)应用程序中有一个变量,当我把它写到屏幕上时,它被写成’ñ’,我怎么能“重新编码”(可能是错误的单词),以便它输出为“N”?
提前致谢.
解决方法
byte[] bytes = Encoding.GetEncoding(1252).GetBytes(Name); var nameFixed = Encoding.UTF8.GetString(bytes);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。