gpt4 book ai didi

c# - 将文字编码不正确的字符串(例如 "ñ")转换为 ISO-8859-1 (Latin1) H

转载 作者:太空狗 更新时间:2023-10-30 00:02:45 29 4
gpt4 key购买 nike

无需过多介绍,我有一个 C# WCF 应用程序,它是我正在调用的基于 XML 的 API 的包装器。该 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 属性中的 ñ

我的问题是,如何将这个编码不正确的字符串转换为 ñ,它应该是什么?

我找到了一堆帖子

但似乎没有一个正是我需要的,或者尝试借鉴那些帖子失败了。

所以,为了让我的问题尽可能简单,

如果我在 C# (.NET 3.5) 应用程序中有一个变量,当我将它写到屏幕上时,它被写为“ñ”,我如何“重新编码”(可能是错误的词) 以便输出为“ñ”?

提前致谢。

最佳答案

理想情况下,这将在您调用的 api 中得到修复,因此它会返回预期的编码。但是您应该能够以这种方式修复它:

byte[] bytes = Encoding.GetEncoding(1252).GetBytes(Name);
var nameFixed = Encoding.UTF8.GetString(bytes);

关于c# - 将文字编码不正确的字符串(例如 "ñ")转换为 ISO-8859-1 (Latin1) H,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31818703/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com