2013-03-28 2 views
3

예를 들어, CLCL 클립 보드 관리자가 수행하는 일종의 변환/매핑이 필요합니다.유니 코드 대 ASCII 변환/매핑

는 그것이 무엇을하면 해당 같다 :

나는 다음과 같은 유니 코드 텍스트 복사
UI를 그리고 CLCL가 변환 : UI

이러한 변환을 할 수있는 기술이 있습니까? 또는 변환에 사용할 수있는 매핑 테이블이 있습니다. 예를 들어 기호 ū가 u에 매핑되어 있습니다. 도움 모든

UPDATE

감사합니다. 여기에 내가 (두 솔루션의 하이브리드), 하나 에릭 Schierboom에 의해 게시 하나는 일반적으로 http://blogs.infosupport.com/normalizing-unicode-strings-in-c/#comment-8984

public static string ConvertUnicodeToAscii(string unicodeStr, bool skipNonConvertibleChars = false) 
{ 
    if (string.IsNullOrWhiteSpace(unicodeStr)) 
    { 
     return unicodeStr; 
    } 

    var normalizedStr = unicodeStr.Normalize(NormalizationForm.FormD); 

    if (skipNonConvertibleChars) 
    { 
     return new string(normalizedStr.ToCharArray().Where(c => (int) c <= 127).ToArray()); 
    } 

    return new string(
     normalizedStr.Where(
      c => 
       { 
        UnicodeCategory category = CharUnicodeInfo.GetUnicodeCategory(c); 
        return category != UnicodeCategory.NonSpacingMark; 
       }).ToArray()); 
} 
+2

무엇,이 불가능하다는 말을 몇 가지 질문? 그 질문은 무엇입니까? 그들은 틀렸고 적절한 대답이 필요합니다. 어떻게 작동하는지 보여주는 몇 가지 질문이 있습니다. –

+0

자신의 매핑을 만드는 방법은? – Falaque

+0

유니 코드는 UTF16을 의미합니까? –

답변

2

나는 몇 시간 동안 다음 코드를 사용했습니다 :

private static string NormalizeDiacriticalCharacters(string value) 
{ 
    if (value == null) 
    { 
     throw new ArgumentNullException("value"); 
    } 

    var normalised = value.Normalize(NormalizationForm.FormD).ToCharArray(); 

    return new string(normalised.Where(c => (int)c <= 127).ToArray()); 
} 
+0

나는'c <= 127' 해킹을 싫어하므로 불필요합니다. 그러나 그렇습니다, 그것은 그것의 요지입니다. –

+0

그렇지 않으면 ASCII 범위를 벗어나는 문자가 포함 된 문자열을 반환 할 수 있었습니까? –

+0

나는 이것을 복제본으로 표시 한 질문을 본다. "올바른"방법은 유니 코드 범주를보고 비 공백/비 결합 분음 문자 만 유지하는 것입니다. 하지만 솔직하게 말해서 아마 효율성이 떨어지고 유니 코드에 대한 (필연적으로 제한된) 내 이해에서 여러분의 대답은 항상 정확한 결과를 산출합니다. –

-1

에서 가져온와 함께 무엇 ASCII는 유니 코드의 부분 집합이기 때문에, ASCII로 유니 코드를 변환 할 수 없습니다 .

즉, 유니 코드의 ASCII 하위 집합 내의 문자를 유니 코드로 변환 할 수 있습니다.

C#에서

, 일반적으로이 모든 문자열 어쨌든 기본적으로 유니 코드이기 때문에 변환을 할 필요가 없다, 모든 구성 요소는 유니 코드를 인식하지만, 당신이 변환을 수행해야하는 경우, 다음 사용

string myString = "SomeString"; 
byte[] asciiString = System.Text.Encoding.ASCII.GetBytes(myString); 
+0

이것은 영업 이익이 의미하는 것이 아닙니다. –

+0

"ASCII는 유니 코드의 하위 집합입니다", 정말입니까? –

+0

@DavinTryon : UTF-8에 포함되어 있지 않은 ASCII 문자를 생각해 볼 수 있습니까? 나는 ASCII가 아닌 많은 문자들을 UTF-8로 생각할 수있다. 예를 들어, 문자는 US-ASCII로 표현 될 수 없습니다. – SecurityMatt

관련 문제