2013-07-26 2 views
1

Как проверить, состоит ли строка, состоящая только из символов, которые могут быть успешно закодированы в ISO 8859-1? Или, другими словами, как найти «незаконные»/«не совместимые с ISO 8859-1» символы в строке?Проверьте, не содержит ли строка только действительные символы ISO 8859-1

+0

Would [это сообщение] (http://stackoverflow.com/questions/1025332/determine-a-strings-encoding-in-c-sharp) помочь? –

+0

@MechanicalObject: Вероятно, нет, если это уже C# String (а не необработанные байты). – Thilo

ответ

12

Попробуйте это:

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

+0

Это выглядит лучше, чем моя идея. Спасибо за Ваш ответ! – netblognet

+1

@netblognet Добро пожаловать! Я также посмотрел на ваш код, но он выглядит «опасным», потому что вы не можете быть на 100% уверены, что символы, отличные от ISO, выдадут знак вопроса. Мой код также быстрее. – ProgramFOX

0

Вы можете настроить массив или список допустимых символов, а затем выполнить итерацию по строке, чтобы проверить, существует ли каждая из них в списке допустимых символов. Список можно создать, добавив к нему все допустимые символы латинского алфавита-1.

0

Я пришел с этой идеей. Возможно ли это?

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; 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^