ไม่สามารถลบ \\ 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 032102106107 100115104102
97 98 99 32 32 102106107 100115104102

ดังที่คุณเห็นในผลลัพธ์หลังจากการแทนที่ศูนย์หายไป!

ข้อมูลเพิ่มเติมเกี่ยวกับการหลีกเลี่ยงสตริงตามตัวอักษร