字符编码

时间:2011-05-17 11:47:30

标签: c# encoding

对于这段代码:

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á'

它出了什么问题?

3 个答案:

答案 0 :(得分:4)

很可能是编码错误。

但是如果你使用这个代码来接收字节块(由协议拆分),你将会遇到一个严重的缺陷:不能保证块是独立编码的。

简单情况:2个块的边界切断了多字节编码的字符。

最佳解决方案:将TextReader附加到您的Stream。

答案 1 :(得分:1)

您确定该流实际上是utf-8编码的吗?尝试在编码之前检查缓冲区中的原始字节(应该有4个)并查看实际的字节值是什么。

答案 2 :(得分:-1)

您是否将结果输出为理解“复杂”编码的内容?