문자열에서 \\ u0000을 제거 할 수 없습니다. [중복]

Nov 12 2020

다음 정보가 포함 된 문자열을 반환하는 API를 호출하고 "abc \\u0000\\u0000 fjkdshf"있습니다.. 다음 코드를 사용하여 이것을 제거하려고 시도했지만 작동하지 않는 것 같습니다.

string res = str.Replace("\\", string.Empty)
    .Replace("u0000", string.Empty)
    .Trim();

Visual Studio를 사용하여 디버깅하지 않을 때이 문자열이 실제로 표시되지 않는다는 기사를 몇 개 읽었으므로이 문제를 해결하는 방법을 모르겠습니다. 도와주세요!

답변

1 MongZhu Nov 12 2020 at 21:20

이중 백 슬래시를 실제 문자로 착각합니다. 두 번째 백 슬래시는 이스케이프되고 첫 번째는 이스케이프 문자 로 사용되기 때문에 디버거에 표시됩니다 . 교체하려면 "\u0000".

다음은 각 문자의 UTF 코드를 인쇄하는 예제 프로그램입니다.

void Main()
{
    string s = "abc \u0000\u0000 fjkdshf";
    Console.WriteLine(string.Join(" ", s.Select(x => Convert.ToInt32(x))));

    string res = s.Replace("\u0000", string.Empty);
    Console.WriteLine(string.Join(" ", res.Select(x => Convert.ToInt32(x))));       
}

산출:

97 98 99 32 0 032 102106107100115104102
97 98 99 32 32102106107100115104102

출력에서 볼 수 있듯이 교체 후 0이 사라졌습니다!

리터럴 문자열 이스케이프 에 대한 추가 정보