2017-12-22 69 views
0

이 질문은 문자 인코딩에 관한 제 모름을 나타낼 수 있습니다. 그렇다면이를 교정하기위한 정보를 매우 기쁘게 생각합니다.임의의 문자열을 ASCII로 변환하고 백 슬래시를 제거하십시오.

새로운 응용 프로그램에서 이전 응용 프로그램으로 문자열을 중계합니다. 이전 응용 프로그램은 ASCII 문자 (http://www.asciitable.com/) 만 허용합니다. 이전 응용 프로그램은 백 슬래시와 같은 특정 문자도 지원하지 않습니다. 새로운 애플리케이션은 어느 정도는 지원합니다.

의 내가 문자열 있다고 가정 해 봅시다 :

"무엇이든간에 - 1_를 夜 _"

난 단지 ASCII 문자로 뭔가 그 변환해야합니다. 예를 들어, 다음과 같을 수 있습니다 :

"무엇이든 - 1_ \ u001cY = = ??? = ??? = ???"

그런 다음 나머지 잘못된 문자를 대체 문자열로 대체하려고합니다.

이상적으로 ASCII로 인코딩 된 문자는 모두 코드 해독 할 수 있어야합니다. 즉, 모든 고유 한 입력 문자열에는 고유 한 출력 문자열이 있습니다 (임의의 입력 "abc"및 "xyz"는 서로 다르지만 동일한 결과를 생성 함). 알고리즘은 출력 문자열을 다시 입력 문자열로 변환 할 수 있습니다.

이것은 내가 무엇을 시도했다입니다 :

static string ConvertToAscii(string str) 
    { 
     var return_string = ""; 

     foreach (var c in str) 
     { 
      if ((int)c < 128) 
      { 
       return_string += c; 
      } 
      else 
      { 
       var charBytes = BitConverter.GetBytes(c); 
       var ascii = Encoding.ASCII.GetString(charBytes); 
       return_string += ascii; 
      } 
     } 

     return return_string; 
    } 

내가 위에서 언급 한 문자열이를 사용하는 경우, 내가 얻을 :

"무엇이든간에 - 1_ \ u001cY _ = ??? = ?? ? = ??? "

그러나 "\ u001cY"는 분명히 ASCII 문자 모음이 아니라 단일 문자입니다. 따라서 대상 데이터베이스에서이를 거부하고 나머지 문자를 남기면서 "\"를 제거하는 방법을 알 수 없습니다.

어떻게하면 모든 문자열을 ASCII 문자 모음으로 변환 할 수 있습니까?

+1

[주제] (https://stackoverflow.com/questions/4352209/conversion-from-utf8-to-ascii)를 보았습니까? –

+0

"ASCII로 인코딩 된 모든 문자는 코드 해독 할 수 있어야합니다"- 0-127 범위 (ASCII) 이외의 문자를 나타내는 방법을 보여주는 샘플은 답변을 제시하는 데 많은 도움이됩니다. –

+0

말하면 ... 내 대상 데이터베이스에서 거부합니다 ... 인쇄 가능한 ASCII 문자로 이전 소프트웨어가 제대로 작동합니까? ASCII의 처음 32 개 문자는 인쇄 할 수 없기 때문에 실제로 그 문자를 얻고 있습니다. 그것들을 제어 문자라고합니다. – raudelravelo91

답변

0

가장 쉬운 방법은 Base64로 당신이 문자열을 표현하는 방법을 상관하지 않기 때문에 모든 바이트 :

Convert.ToBase64String(Encoding.Unicode.GetBytes("Whatever - 1_夜_")) 

ASCII (심지어 인쇄 가능한 ASCII를) 보장되는 결과를 생산합니다 - 귀하의 문자열 결과를 "VwBoAGEAdABlAHYAZQByACAALQAgADEAXwAcWV8APdim3D3Yptw92Kbc"가됩니다.