C# 检查字符串是否仅由有效的ISO 8859-1字符组成

C# 检查字符串是否仅由有效的ISO 8859-1字符组成,c#,string,encoding,character-encoding,iso-8859-1,C#,String,Encoding,Character Encoding,Iso 8859 1,如何检查字符串是否仅由字符组成,这些字符可以在ISO 8859-1中成功编码?或者换句话说-如何在字符串中查找“非法”/“与ISO 8859-1不兼容”字符?您可以设置一个有效字符数组或列表,然后遍历字符串,检查有效字符列表中是否存在每个字符。可以通过向列表中添加所有有效的拉丁-1字符来创建该列表。尝试以下操作: private static bool IsValidISO(string input) { byte[] bytes = Encoding.GetEn

如何检查字符串是否仅由字符组成,这些字符可以在ISO 8859-1中成功编码?或者换句话说-如何在字符串中查找“非法”/“与ISO 8859-1不兼容”字符?

您可以设置一个有效字符数组或列表,然后遍历字符串,检查有效字符列表中是否存在每个字符。可以通过向列表中添加所有有效的拉丁-1字符来创建该列表。

尝试以下操作:

    private static bool IsValidISO(string input)
    {
        byte[] bytes = Encoding.GetEncoding("ISO-8859-1").GetBytes(input);
        String result = Encoding.GetEncoding("ISO-8859-1").GetString(bytes);
        return String.Equals(input, result);
    }
这个答案基于这个Java问题的答案(我的代码是C#等价物):
我想出了这个主意。这可能吗

    private static bool IsValidISO(string input)
    {
        foreach (char c in input)
        {
            Encoding iso = Encoding.GetEncoding("ISO-8859-1");
            Encoding utf8 = Encoding.UTF8;

            byte[] isoBytes = iso.GetBytes(c.ToString());
            byte[] utfBytes = Encoding.Convert(iso, utf8, isoBytes);

            string convertedC = utf8.GetString(utfBytes);
            if (c != '?' && convertedC == "?")
                return false;
        }
        return true;
    }

会有帮助吗?@MechanicalObject:可能不会,如果它已经是一个C#字符串(而不是原始字节)。这看起来比我的想法要好。谢谢你的回答@不客气!我也看过你的代码,但它看起来“危险”,因为你不能100%确定非ISO字符会打问号。我的代码也更快。