【发布时间】:2014-07-27 18:56:37
【问题描述】:
我在使用 UTF16 格式的 StreamWriter 将字符 56623 写入流时遇到问题(该问题在其他编码中也存在)。如果我从流中获取缓冲区,它包含值 65533 而不是我最初写的。在进行随机单元测试时,这个问题突然出现在我身上,它没有出现在值 60000 和 95 上。
为了说明,我有一个最小的程序来检查行为:
char value = (char)56623;
MemoryStream stream = new MemoryStream();
StreamWriter writer = new StreamWriter(stream, Encoding.Unicode);
writer.Write(value);
writer.Close();
var byteArray = BitConverter.GetBytes(value); // Reference bytes
var buffer = writer.GetBuffer();
通过读取 byteArray 和缓冲区,我得到:
byteArray = [221,47] = 11011101 00101111 = 56623
buffer = [255,254,253,255,...] = BOM 11111101 11111111 ... = BOM 65533
因此,写入值 65533 显然 不等于 原始 56623。但是,当尝试使用值 60000 时,会写入 正确 值:
byteArray = [96,234] = 01100000 11101010 = 60000
buffer = [255,254,96,234,...] = BOM 01100000 11101010 ... = BOM 60000
我不明白为什么会出现这种行为,但我不愿意认为 StreamWriter 的实现存在问题,所以我缺少一些东西。
我在这里没有看到什么?
谢谢!
【问题讨论】:
标签: c# .net character-encoding char streamwriter