c# – 将文字不正确编码的字符串(例如“ñ”)转换为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,"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
> Decode a =?utf-8?B?…?= 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)应用程序中有一个变量,当我把它写到屏幕上时,它被写成’ñ’,我怎么能“重新编码”(可能是错误的单词),以便它输出为“N”?

提前致谢.

解决方法

理想情况下,这将在您调用的api中修复,因此它返回预期的编码.但你应该能够这样修复:

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

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...