Как проверить, состоит ли строка, состоящая только из символов, которые могут быть успешно закодированы в ISO 8859-1? Или, другими словами, как найти «незаконные»/«не совместимые с ISO 8859-1» символы в строке?Проверьте, не содержит ли строка только действительные символы ISO 8859-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# эквивалент): http://www.velocityreviews.com/forums/t137810-checking-whether-a-string-contains-only-iso-8859-1-chars.html
Это выглядит лучше, чем моя идея. Спасибо за Ваш ответ! – netblognet
@netblognet Добро пожаловать! Я также посмотрел на ваш код, но он выглядит «опасным», потому что вы не можете быть на 100% уверены, что символы, отличные от ISO, выдадут знак вопроса. Мой код также быстрее. – ProgramFOX
Вы можете настроить массив или список допустимых символов, а затем выполнить итерацию по строке, чтобы проверить, существует ли каждая из них в списке допустимых символов. Список можно создать, добавив к нему все допустимые символы латинского алфавита-1.
Я пришел с этой идеей. Возможно ли это?
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;
}
Would [это сообщение] (http://stackoverflow.com/questions/1025332/determine-a-strings-encoding-in-c-sharp) помочь? –
@MechanicalObject: Вероятно, нет, если это уже C# String (а не необработанные байты). – Thilo