2013-07-26 3 views
1

문자열이 ISO 8859-1로 성공적으로 인코딩 될 수있는 문자로만 구성되는지 확인하는 방법은 무엇입니까? 또는 다른 말로하면 - 문자열에서 "불법"/ "ISO 8859-1과 호환되지 않는"문자를 찾는 방법은 무엇입니까?문자열이 유효한 ISO 8859-1 문자로만 구성되어 있는지 확인하십시오.

+0

겠습니까 [이 게시물] (http://stackoverflow.com/questions/1025332/determine-a-strings-encoding-in-c-sharp) 도움이 필요하십니까? –

+0

@MechanicalObject : 아마도 C# 문자열 (원시 바이트가 아님) 인 경우 일 것입니다. – 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); 
    } 

이 답변이 자바 질문의 답변을 기반으로 (내 코드는 C#을 동일합니다) : http://www.velocityreviews.com/forums/t137810-checking-whether-a-string-contains-only-iso-8859-1-chars.html

+0

이것은 내 생각보다 좋아 보인다. 귀하의 답변 주셔서 감사합니다! – netblognet

+1

@netblognet 여러분을 환영합니다! 또한 코드를 살펴 봤지만 ISO가 아닌 문자가 물음표를 나타낼 수 있는지 100 % 확신 할 수 없으므로 "위험한"것처럼 보입니다. 내 코드도 빠릅니다. – 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; 
    } 
관련 문제