【发布时间】:2011-02-24 07:17:16
【问题描述】:
我在使用 Visual Studio 2010 在 C# 4.0 中比较单元测试中的字符串时遇到问题。同样的测试用例在 Visual Studio 2008(使用 C# 3.5)中正常工作。
下面是相关代码sn-p:
byte[] rawData = GetData();
string data = Encoding.UTF8.GetString(rawData);
Assert.AreEqual("Constant", data, false, CultureInfo.InvariantCulture);
在调试此测试时,data 字符串在肉眼看来包含与文字完全相同的字符串。当我调用data.ToCharArray() 时,我注意到字符串data 的第一个字节是值65279,它是UTF-8 字节顺序标记。我不明白为什么Encoding.UTF8.GetString() 保留这个字节。
如何让Encoding.UTF8.GetString()不将字节顺序标记放入结果字符串中?
更新: 问题在于从磁盘读取文件的GetData() 使用FileStream.readbytes() 从文件中读取数据。我通过使用StreamReader 纠正了这个问题,并使用Encoding.UTF8.GetBytes() 将字符串转换为字节,这是它最初应该做的!感谢大家的帮助。
【问题讨论】:
-
你能发布一个小而完整的程序来演示这个问题吗?
标签: c# unit-testing visual-studio-2010 utf-8 equality