我不想讲太多细节,我有一个C# WCF应用程序,它是我正在调用的基于XML的API的 Package 器。该API返回一个字符串,实际上只是一个XML文档。然后我解析该XML并将其返回。返回的信息在浏览器中显示为JSON。
有点混乱,但下面是一些示例代码:
[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,
"ErrorDetail": null,
"ErrorMessage":"Success"
},
"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
- How to Decode "=?utf-8?B?...?=" to 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)应用程序中有一个变量,当我把它写出来到屏幕上时,它被写为'Ö ±',我如何“重新编码”(可能是错误的单词),使它输出为'ñ'?
先谢了。
1条答案
按热度按时间5ssjco0h1#
理想情况下,这个问题应该在你调用的API中得到解决,这样它就能返回预期的编码,但是你应该可以这样解决:
编码
1252
就是Windows-1252编码。