2012-03-05 2 views
2

URL에 허용 될 수 있도록 â Ù á Č Ģ과 같은 UTF-8 문자를 a U a C G으로 자동 변환하려고합니다. 이 방법URL에서 사용하기 위해 UTF-8 문자를 ASCII로 변환하는 방법은 무엇입니까?

Encoding sourceEncoding = Encoding.GetEncoding(28591); // ISO-8859-1 

byte[] asciiBytes = Encoding.Convert(sourceEncoding, Encoding.ASCII, sourceEncoding.GetBytes(<source text>)); 

String asciiString = Encoding.UTF8.GetString(asciiBytes); 

두 가지 문제 :

지금까지 나는이이

  1. 이 일부 문자 (C와 G)에 대한 그러나, U, A (다른 사람을 위해 잘 작동) 문자 대신에 물음표를 반환합니다.
  2. 전체 사이트는 ISO-8859-1이 아닌 UTF-8이지만 sourceEncoding을 Encoding.UTF8로 설정하면 모든 문자가 물음표로 변환되므로 전혀 작동하지 않습니다.

이 작품을 만들 수있는 아이디어가 있습니까?

+0

[url-encoding] (http://stackoverflow.com/questions/575440/url-encoding-using-c-sharp) 이러한 문자가 아닌 이유가 있습니까? – Jon

+0

정말로 분음 기호를 제거하려면 [이 대답] (http://stackoverflow.com/a/3769995/41071)을보십시오. – svick

+0

이것은 이미 답변 [여기] (http://stackoverflow.com/questions/497782/how-to-convert-a-string-from-utf8-to-ascii-single-byte-in-c) 확인하십시오 귀하의 charcan은 ASCII로 표시 될 수 있습니다. 질문에 대한 답변을 보내주십시오. –

답변

2

normalization을 사용하는 것이 가장 좋은 분음 기호 (틸트, 시디 르, 움라우트 및 친구들)를 제거 할 수 있습니다.

다음 방법은 모든 분음 부호의 99 %를 대체해야합니다. 그러나 마지막 퍼센트는 여전히?로 표시됩니다. 너가보고 싶지 않으면? 이 메소드를 빈 문자열로 사용하고 나면 대체하십시오.

public static string RemoveDiacritics(string value) 
{ 
    if (String.IsNullOrEmpty(value)) 
     return value; 

    string normalized = value.Normalize(NormalizationForm.FormD); 
    StringBuilder sb = new StringBuilder(); 

    foreach (char c in normalized) 
    { 
     if (System.Globalization.CharUnicodeInfo.GetUnicodeCategory(c) != System.Globalization.UnicodeCategory.NonSpacingMark) 
      sb.Append(c); 
    } 

    Encoding nonunicode = Encoding.GetEncoding(850); 
    Encoding unicode = Encoding.Unicode; 

    byte[] nonunicodeBytes = Encoding.Convert(unicode, nonunicode, unicode.GetBytes(sb.ToString())); 
    char[] nonunicodeChars = new char[nonunicode.GetCharCount(nonunicodeBytes, 0, nonunicodeBytes.Length)]; 
    nonunicode.GetChars(nonunicodeBytes, 0, nonunicodeBytes.Length, nonunicodeChars, 0); 

    return new string(nonunicodeChars); 
} 

희망 하시겠습니까?

관련 문제