对于这段代码:
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?”而不是“欧拉”
它有什么问题?
发布于 2011-05-17 19:51:49
你确定这个流实际上是utf-8编码的吗?尝试在编码之前检查缓冲区中的原始字节(应该有4个),看看实际的字节值是什么。
发布于 2011-05-17 20:03:05
很可能是错误的编码。
但是,如果您使用此代码接收字节块(按协议拆分),您将有一个严重的缺陷:不能保证这些块是独立编码的。
简单的情况:两个块的边界穿过了一个多字节编码的字符。
最好的解决方案:给你的Stream附加一个TextReader。
发布于 2011-05-17 20:23:49
你是不是要把结果输出成能理解“复杂”编码的东西?
https://stackoverflow.com/questions/6030303
复制相似问题