代码之家  ›  专栏  ›  技术社区  ›  Wei Lin

在Azure Web应用程序服务上,有时会得到字符(65533),但之后情况会恢复正常,它们是相同的页面。

  •  2
  • Wei Lin  · 技术社区  · 7 年前

    Web Link

    问题:

    在Azure Web应用服务上,有时会获取字符(65533),但之后情况会恢复正常,它们是相同的页面,在本地IIS服务器下也是正常的。

    字符(65533)版本:

    ...這���種假物件...
    

    正常版本:

    ...這兩種假物件...
    

    环境:

    Web.CONFIG: <globalization requestEncoding="utf-8" responseEncoding="utf-8" />

    服务器:Microsoft IIS/10.0、ASP.NET 4.5.2

    框架:blogengine.net

    我的问题:

    是天蓝色问题还是某个天蓝色设置?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Will Huang    7 年前

    我认为这与 BlogEngine.NET 实施。在 CompressionModule.cs#L189 ,它配置了 WebResourceFilter 进入之内 context.Response.Filter . 这就是这个问题的根本原因。

    你可以查一下 WebResourceFilter.cs 文件。这个 Write() 方法确实有问题:

    public override void Write(byte[] buffer, int offset, int count)
    {
        // collect all HTML in local variable
        var html = Encoding.UTF8.GetString(buffer, offset, count);
        HtmlOut += html;
    }
    

    缓冲区大小不能保证。如果缓冲区拆分在utf-8字符的中间(其中utf-8中的中文字符是多字节)。用utf8不可能得到正确的字符串。所以你会看到你提到的那些乱七八糟的人物。

    这里还有一个确切的问题: https://github.com/rxtur/BlogEngine.NET/issues/91