C# 将未正确编码的文字字符串(例如“xC3”和“xB1”)转换为ISO-8859-1(拉丁语)H
不用太详细,我有一个C#WCF应用程序,它是我正在调用的基于XML的API的包装器。该API返回一个字符串,它实际上只是一个XML文档。然后解析该XML并返回它。返回的信息在浏览器中显示为JSON 有点混乱,但下面是一些示例代码:C# 将未正确编码的文字字符串(例如“xC3”和“xB1”)转换为ISO-8859-1(拉丁语)H,c#,.net,encoding,C#,.net,Encoding,不用太详细,我有一个C#WCF应用程序,它是我正在调用的基于XML的API的包装器。该API返回一个字符串,它实际上只是一个XML文档。然后解析该XML并返回它。返回的信息在浏览器中显示为JSON 有点混乱,但下面是一些示例代码: [OperationContract] [WebInvoke(Method = "GET", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.J
[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)
}
};
}
现在,我的问题是,有时返回的字符串(直接从API返回)是一个编码错误的UTF-8字符串(我想?我可能有点搞错了)。例如,我可能会回来:
{
"Error": {
"ErrorCode": 0,
"ErrorDetail": null,
"ErrorMessage":"Success"
},
"User": {
"Name": "Jose Nuñez",
"Email": "jose.nunez@example.com",
"ID": 54321
}
}
注意User对象下Name属性中的ñ
我的问题是,如何将这个未正确编码的字符串转换为ñ
,它应该是什么
我找到了一堆帖子
- 最有希望的
提前感谢。理想情况下,这将在您调用的api中修复,因此它将返回预期的编码。但您应该能够通过以下方式进行修复:
byte[] bytes = Encoding.GetEncoding(1252).GetBytes(Name);
var nameFixed = Encoding.UTF8.GetString(bytes);
轰,这完全奏效了。谢谢此外,我同意,理想情况下这应该在API的根目录中修复。但是,由于我无法控制(请记住,我的API实际上只是真正API的包装器),因此这将是我的工作。非常感谢。解决了我的Dynamics 365 Webhook->Azure HTTP触发器函数问题
byte[] bytes = Encoding.GetEncoding(1252).GetBytes(Name);
var nameFixed = Encoding.UTF8.GetString(bytes);