2017-04-05 10 views
0

Replace() 메서드를 사용하지만 문자열 값 대신 16 진수 값을 사용하고 싶습니다.16 진수 값으로 작업하는 Replace()

텍스트 파일을 작성하는 C#의 프로그램이 있습니다.

이유는 모르겠지만 프로그래머가 '°'(-> 숫자)를 쓰면 wrotten  ° (16 진수 : B0 대신 C2 B0)입니다.

나는 이것을 중재하기 위해 패치를하고 싶습니다.

C2B0를 B0으로 바꾸려면 다시 배치 할 수 있습니까? 어떻게하는거야?

고마워 :이 문제에 대한 최선의 해결책 인 경우

+0

왜 'Replace()'가 작동하지 않습니까? 'yourString.Replace ((char) 0xC2B0, (char) 0xB0); ' – Equalsk

+0

여기서 "16 진수"가 의미하는 것이 명확하지 않습니다. * 바이너리 *로 간주 할 때 텍스트 파일의 데이터를 의미하는 경우 데이터를 바이너리로 처리해야합니다. 내 생각 엔 당신이 실제로 [U + C2B0] (http://www.fileformat.info/info/unicode/char/c2b0/index.htm)을 의미하지 않는다는 것입니다. –

+0

이것은 대체 후보는 아니지만 인코딩 (유니 코드 <> ANSI) 문제입니다. 어떤 응용 프로그램이 이것을 "°"로 렌더링합니까? 파일에 쓰는 코드의 최소한의 예를 보여줄 수 있습니까? – dlatikay

답변

0

확실하지 않지만 16 진수 값을 사용하여 문자열에 대한 대체 기능을하려면이 작동합니다 :

var newString = HexReplace(sourceString, "C2B0", "B0"); 


    private static string HexReplace(string source, string search, string replaceWith) { 
     var realSearch = string.Empty; 
     var realReplace = string.Empty; 

     if(search.Length % 2 == 1) throw new Exception("Search parameter incorrect!"); 

     for (var i = 0; i < search.Length/2; i++) { 
      var hex = search.Substring(i * 2, 2); 
      realSearch += (char)int.Parse(hex, System.Globalization.NumberStyles.HexNumber); 
     } 
     for (var i = 0; i < replaceWith.Length/2; i++) { 
      var hex = replaceWith.Substring(i * 2, 2); 
      realReplace += (char)int.Parse(hex, System.Globalization.NumberStyles.HexNumber); 
     } 

     return source.Replace(realSearch, realReplace); 
    } 
0

C#을 문자열을 유니 코드입니다. 파일에 기록 될 때 인코딩이 적용되어야합니다. File.WriteAllText이 사용하는 기본 인코딩은 utf-8 with no byte order mark입니다.

2 바이트 시퀀스 0xC2B0은 °도 U + 00B0 코드 포인트 in utf-8의 표현입니다.

는 0xC2 부분을 제거하려면, 라틴어-1, 예를 들어, 다른 인코딩을 적용 UTF-8 환경을 제거하는 모범 사례 :

var latin1 = Encoding.GetEncoding(1252); 
File.WriteAllText(path, text, latin1); 

질문의 "진수 교체"아이디어를 해결하기 위해 기존 파일의 앞 바이트는 위의 그림과 같이 WriteAllText이 뒤에 오는 utf-8을 사용하여 ReadAllText을 수행하는 것입니다 (또는 파일이 너무 커서 전체 메모리로 읽을 수없는 경우 스트림 청킹).

단일 바이트 문자 인코딩은 모든 유니 코드 문자를 나타낼 수 없으므로 DataTable에서 이러한 문자가 대체됩니다.

 °의 표현은 파일을 표시하는 데 사용하는 뷰어/편집기에서 비난 받아야합니다.

추가 읽기 : https://stackoverflow.com/a/17269952/1132334