Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ISO-8859-1中的特殊字符_C#_Iso 8859 1 - Fatal编程技术网

C# ISO-8859-1中的特殊字符

C# ISO-8859-1中的特殊字符,c#,iso-8859-1,C#,Iso 8859 1,我正在用C#阅读HTML页面。请求类似firefox的页面。网站charset=ISO-8859-1(我正在使用)。但是我不能设法得到‰。当我请求源代码时,我在它的位置上得到了?标记。其他特殊字符如é也可以。有什么建议吗?我该怎么办?字符不是ISO-8859-1编码的一部分,不能用它来表示 这可以通过以下代码片段轻松演示: public class Program { static void Main() { var input = "‰"; va

我正在用C#阅读HTML页面。请求类似firefox的页面。网站
charset=ISO-8859-1
(我正在使用)。但是我不能设法得到
。当我请求源代码时,我在它的位置上得到了
标记。其他特殊字符如
é
也可以。有什么建议吗?我该怎么办?

字符不是ISO-8859-1编码的一部分,不能用它来表示

这可以通过以下代码片段轻松演示:

public class Program
{
    static void Main()
    {
        var input = "‰";
        var encoding = Encoding.GetEncoding("iso-8859-1");
        var buffer = encoding.GetBytes(input);
        input = encoding.GetString(buffer);
        // prints a ? because ISO-8859-1 cannot represent this character
        Console.WriteLine(input);
    }
}

因此,我想您必须使用一些其他编码,例如UTF-8,它允许表示此字符。

如回复中其他地方所述,ISO 8859-1中没有每千符号


但是,您可以将is作为一个实体发送(
)。由于HTML(如XML)的底层模型是Unicode,因此无法在文本编码中表示但使用Unicode的字符可以作为实体包含。

字符
':/
在ISO-8859-1中是而不是。然而,它通常与ISO-8859-1混淆

最好的解决方案是使用
如Richard所建议,和/或从ISO-8859-1更改为UTF-8


(也有可能切换到代码页1252(
Windows-1252
),但有一个风险,它不适用于所有用户;在iso-8859-1中。你确定该站点发送的是8859而不是8859伪装下的其他东西吗?这是U+2030,iso-8859-1不支持的标志符号@MarcB它不在iso-8859-1中,但在iso-8859-1的MS扩展中:。在ISO-8859-1中,代码127–159(含)未定义。@Richard thnx,你救了我一天。需要使用扩展名^^^,但是我没有像
这样的特殊字符others@Buar:您需要确保所有内容都与编码一致。您没有为服务器端或客户端提供任何代码,因此很难显示发生了什么。Thnx Richard已经在评论中告诉我了。我已经解决了我的问题^^
public static string stringToISO8859str(string textToConvert)
        {
            Encoding iso8859 = Encoding.GetEncoding("iso-8859-1");
            Encoding unicode = Encoding.Unicode;
            byte[] srcTextBytes = iso8859.GetBytes(textToConvert);
            byte[] destTextBytes = Encoding.Convert(iso8859, unicode, srcTextBytes);
            char[] destChars = new char[unicode.GetCharCount(destTextBytes, 0, destTextBytes.Length)];
            unicode.GetChars(destTextBytes, 0, destTextBytes.Length, destChars, 0);
            StringBuilder result = new StringBuilder(textToConvert.Length + (int)(textToConvert.Length * 0.1));
            foreach (char c in destChars)
            {
                int value = Convert.ToInt32(c);
                if (value == 34)
                    result.AppendFormat(""");
                else if (value == 38)
                    result.AppendFormat("&");
                else if (value == 39)
                    result.AppendFormat("'");
                else if (value == 60)
                    result.AppendFormat("<");
                else if (value == 62)
                    result.AppendFormat(">");
                else
                    result.Append(c);
            }
            return result.ToString();            
        }