对于这段代码:
String content = String.Empty;
ListenerStateObject state = (ListenerStateObject)ar.AsyncState;
Socket handler = state.workSocket;
int bytesRead = handler.EndReceive(ar);
if (bytesRead > 0)
{
state.sb.Append(Encoding.UTF8.GetString(state.buffer, 0, bytesRead));
content = state.sb.ToString();
...
我正在打'Ol?'而不是'Olá'
它出了什么问题?
答案 0 :(得分:4)
很可能是编码错误。
但是如果你使用这个代码来接收字节块(由协议拆分),你将会遇到一个严重的缺陷:不能保证块是独立编码的。
简单情况:2个块的边界切断了多字节编码的字符。
最佳解决方案:将TextReader附加到您的Stream。
答案 1 :(得分:1)
您确定该流实际上是utf-8编码的吗?尝试在编码之前检查缓冲区中的原始字节(应该有4个)并查看实际的字节值是什么。
答案 2 :(得分:-1)
您是否将结果输出为理解“复杂”编码的内容?