2011-01-05 8 views
1

내 C# 응용 프로그램은 유니 코드 및 ASCII 문자 모두 C#

string [,] unicode2Ascii = { { "ஹ", "\x86" } };

& # 3001이 매핑이에 설정 조작. 이것은 MS Word가 바이트 시퀀스로 저장 한 유니 코드 값의 원시 16 진수 리터럴입니다. 이 유니 코드 값 "문자열"을 255 이하의 16 진수 값으로 매핑하려고합니다 (비 유니 코드 지원 시스템을 수용 할 수 있도록). 결과 OUPUT가있다 그러나

S = S.replace(unicode2Ascii[0,0], unicode2Ascii[0,1]); 

:

는이 같은하려면 string.replace를 사용하려고? 실제 16 진수 0x86 대신 저장됩니다. 해당 배열의 두 번째 요소에 대한 인코딩을 windows-1252와 같은 것으로 설정할 수있는 방법에 대한 포인터는 무엇입니까?

또는이 변환을 수행하는 더 좋은 방법이 있습니까? .NET에서

답변

3

이 방법이 도움이되는지는 잘 모르지만 타밀어 코드 "57004-ISCII Tamil"은 Windows에서 지원됩니다.

위의 예제 문자에 대해 동일한 번역이 제공되지 않습니다. 'ஹ'의 경우 216을 제공합니다. 아마도 다른 코드 페이지를 사용해야합니까?

 string tamilUnicodeString = "ஹ"; 

     Encoding encoding = Encoding.GetEncoding("x-iscii-ta"); 

     byte[] codepageBytes = encoding.GetBytes(tamilUnicodeString); 

업데이트

당신이 입력으로 유니 코드 파일을 취하는 트릭을해야 다음, 단일 바이트 표현을 얻을 문자를 음역하고자하는 경우. 사전에 각 문자를 인코딩하는 경우 결과 배열은 1 바이트 표현이어야합니다.

 Dictionary<char, char> lookup = new Dictionary<char, char> 
     { 
      { 'ஹ', '\x86' }, 
      { 'இ', '\x87' }, 
      //next pair..., 
      //etc, etc. 
     }; 

     string input = "ஹஇதில் உள்ள தமிழ் எழுத்துக்கள் சரியாகத் தெரிந்தால்"; 

     char[] chars = input.ToCharArray(); 

     for (int i = 0; i < chars.Length; i++) 
     { 
      char replaceChar; 

      if (lookup.TryGetValue(chars[i], out replaceChar)) 
      { 
       chars[i] = replaceChar; 
      } 
     } 

     byte[] output = Encoding.GetEncoding("iso-8859-1").GetBytes(chars); 
+0

유니 코드 문자에 해당하는 ASCII 코드를 검색하려는 의도가 없습니다. 대신 단순히 해당 매핑 테이블에 정의 된 "일부"ASCII 코드 문자로 바꾸십시오. 기본적으로 .NET에서 문자열로 0x86을 표현할 수 있도록 노력하고 있습니다. & # 3001 리터럴을 대체 할 string.replace 메서드를 사용할 수 있습니다. – Murlex

+0

@Murlex @Murlex 정확히 언제 어떤 결과가 기대되는지 혼란스러워합니다. 타밀어 텍스트 인 유니 코드 파일을 코드 페이지 1252 (질문에서 설명한대로)의 ANSI 파일로 변환합니다. 의도 한 청중은 누구입니까? –

+0

UNICODE 사양이 나오기 전에 TSCII (www.tscii.org)라고하는 타밀어 코드 페이지 표준을 사용했습니다.타밀어 유니 코드 문자를 표시하는 데 필요한 새로운 쉐이핑 엔진을 지원하지 않는 시스템이 여전히 있습니다. 따라서 우리는 때때로 유니 코드 텍스트를 1 바이트 TSCII 표준으로 "다운 그레이드"해야합니다. – Murlex

3

문자열 사전에

덕분에 내부적으로 항상 유니 코드입니다. 그러나 이것은 정말로 중요하지 않습니다. 문자열은 문자로 된 시리즈이며 .NET 문자열은 모든 유니 코드 문자를 지원합니다. 그것들이 어떻게 기억에 나타나는지 신경 쓰지 않아야합니다. 문자열이 .NET을 떠날 때 (또는 입력 할 때)에만 인코딩에 관심이 있습니다. 즉, 파일에 쓰기 (읽기), 소켓을 통해 다른 시스템으로 보내기 (수신) 등). Encoding 클래스를 사용하여 원하는 인코딩으로 변환합니다. .NET 문자열에서 문자를 바꾸거나 인코딩 트릭을 사용하는 것은 의미가 없습니다. 또한이 기사를 추천합니다 http://www.joelonsoftware.com/articles/Unicode.html

+0

예 연습의 목적은 파일의 내용을 수정하는 것입니다. 링크를 가져 주셔서 감사합니다. .. – Murlex

+0

그런 다음 문자열을 수정하고 문자열을 파일에 쓸 때 특정 인코딩을 사용합니다. .NET 코드에서는 유니 코드 코드 포인트 번호를 사용할 필요가 없습니다. .NET 소스에서 심볼을 직접 사용할 수 있습니다. – Stilgar

+0

링크를 다시 보내 주셔서 감사합니다. 인코딩을 읽거나 파일에 쓸 때 인코딩을 사용하는 방법에 대한 기본적인 이해를했습니다. – Murlex