ฉันมีปัญหาในการเปรียบเทียบสตริงใน Unit Test ใน C# 4.0 โดยใช้ Visual Studio 2010 กรณีทดสอบเดียวกันนี้ทำงานอย่างถูกต้องใน Visual Studio 2008 (พร้อม C# 3.5)
นี่คือข้อมูลโค้ดที่เกี่ยวข้อง:
byte[] rawData = GetData();
string data = Encoding.UTF8.GetString(rawData);
Assert.AreEqual("Constant", data, false, CultureInfo.InvariantCulture);
ขณะทำการดีบั๊กการทดสอบนี้ สตริง data
จะปรากฏด้วยตาเปล่าเพื่อให้มีสตริงเดียวกันกับตัวอักษรทุกประการ เมื่อฉันเรียก data.ToCharArray()
ฉันสังเกตเห็นว่าไบต์แรกของสตริง data
คือค่า 65279
ซึ่งเป็น UTF-8 Byte Order Marker สิ่งที่ฉันไม่เข้าใจคือทำไม Encoding.UTF8.GetString()
เก็บไบต์นี้ไว้
ฉันจะรับ Encoding.UTF8.GetString()
เพื่อ ไม่ ใส่ Byte Order Marker ในสตริงผลลัพธ์ได้อย่างไร
อัปเดต: ปัญหาคือ GetData()
ซึ่งอ่านไฟล์จากดิสก์ อ่านข้อมูลจากไฟล์โดยใช้ FileStream.readbytes()
ฉันแก้ไขสิ่งนี้โดยใช้ StreamReader
และแปลงสตริงเป็นไบต์โดยใช้ Encoding.UTF8.GetBytes()
ซึ่งเป็นสิ่งที่ควรทำตั้งแต่แรก! ขอบคุณสำหรับความช่วยเหลือทั้งหมด