[英]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.