ปัญหาการเข้ารหัสด้วยตัวกรองการตอบสนองใน asp.net

ฉันกำลังจัดการกับโค้ดบางตัวที่ใช้ตัวกรอง HttpResponse แบบกำหนดเองในแอปพลิเคชัน asp.net

response.Filter = new HtmlResponseFilterStream();

HtmlResponseFilterStream นี้สืบทอดมาจาก MemoryStream วิธีการเขียนได้รับการแทนที่เพื่อรับเนื้อหาของการตอบสนอง HTTP ฉันใช้ Encoding.UTF8.GetString เพื่อรับเนื้อหาของหน้าเป็นชิ้นๆ

public override void Write(byte[] buffer, int offset, int count)
{
        var contentInBuffer = Encoding.UTF8.GetString(buffer);

        ...
 }

ในเครื่องท้องถิ่นของฉัน หากฉันไปที่หน้าใดๆ และแก้ไขข้อบกพร่องของโค้ด ฉันจะเห็นตัวแปร contentInBuffer ที่เติมเนื้อหา html จริงลงไป ทั้งกับ ISS ในพื้นที่หรือ ISS Express นอกจากนี้ยังใช้ได้ผลในสภาพแวดล้อมการผลิตของเราด้วย

อย่างไรก็ตาม หากฉันไปที่เครื่องทดสอบ สิ่งต่างๆ จะไม่ทำงานอย่างที่คาดไว้ หากฉันดีบักเนื้อหาภายในวิธีการเขียน (โดยใช้ดีบักเกอร์ระยะไกล) ฉันได้รับตัวละครแปลกๆแทน ดังนั้นฉันเดาว่านี่เป็นเพราะการใช้การเข้ารหัสที่แตกต่างกัน .. อาจจะ ..

ทั้งเซิร์ฟเวอร์ที่ใช้งานจริงและเซิร์ฟเวอร์ทดสอบมีข้อมูลจำเพาะเหมือนกันกับระบบปฏิบัติการและเซิร์ฟเวอร์เวอร์ชัน iis เดียวกัน

ฉันตรวจสอบการตั้งค่า .Net Globalization และการเข้ารหัสถูกตั้งค่าเป็น UTF-8 สำหรับคำขอ ส่วนหัวการตอบกลับ และการตอบกลับในทั้งสองเครื่อง

ฉันค่อนข้างแน่ใจว่านี่จะต้องเป็นสิ่งที่เกี่ยวข้องกับการตั้งค่าสภาพแวดล้อม ไม่แน่ใจว่าเกี่ยวข้องกับ IIS หรือ windows

มีความคิดบ้างไหม?


person Asier Barrenetxea    schedule 09.07.2015    source แหล่งที่มา


คำตอบ (1)


อักขระแปลก ๆ ต้องเกิดจากการบีบอัด GZip ซึ่งเรียกว่า "การบีบอัดแบบไดนามิก" ซึ่งโดยปกติจะไม่ได้ติดตั้งตามค่าเริ่มต้น แต่ดูเหมือนว่าเครื่องทดสอบของคุณมี

person Akash Kava    schedule 09.07.2015
comment
ขออภัย ฉันไม่ได้บอกว่าฉันได้ตรวจสอบการบีบอัดแบบไดนามิกแล้ว และมันถูกเปิดใช้งานในทุกเซิร์ฟเวอร์ ดังนั้นจึงไม่ควรเป็นอย่างนั้น - person Asier Barrenetxea; 10.07.2015