簡體   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