ไม่สามารถลบ \\ 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
ดังที่คุณเห็นในผลลัพธ์หลังจากการแทนที่ศูนย์หายไป!
ข้อมูลเพิ่มเติมเกี่ยวกับการหลีกเลี่ยงสตริงตามตัวอักษร