繁体   English   中英

将字面不正确编码的字符串(例如,“ñ”)转换为 ISO-8859-1 (Latin1) H

[英]Convert a literal improperly encoded string (e.g., "ñ") to ISO-8859-1 (Latin1) H

无需过多赘述,我有一个 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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM