Server.UrlEncode()指定GBK符号化

3043 ワード

質問:Server.UrlEncode(「こんにちは」)は符号化フォーマットを指定できません
解決方法:方法一、サーバーを呼び出す.UrlEncode()の前にResponseに加入する.ContentEncoding = System.Text.Encoding.GetEncoding(「GBK」)メソッド2、web.configでの構成:
<configuration>
 <system.web>
  <globalization requestEncoding="GBK" responseEncoding="GBK" />
 system.web>
configuration>

理由:
サーバーを表示します.UrlEncode()ソースコード(HttpServerUtilityクラス):
public string UrlEncode(string s) {
    Encoding e = (_context != null) ? _context.Response.ContentEncoding : Encoding.UTF8;
    return HttpUtility.UrlEncode(s, e);
}

そして_context.Response.ContentEncodingのソースコードは
public Encoding ContentEncoding {
    get {
        if (_encoding == null) {
        // use LKG config because Response.ContentEncoding is need to display [config] error
            GlobalizationSection globConfig = RuntimeConfig.GetLKGConfig(_context).Globalization;
            if (globConfig != null)
                _encoding = globConfig.ResponseEncoding;

            if (_encoding == null)
                _encoding = Encoding.Default;
        }

        return _encoding;
    }
    set {
        if (value == null)
            throw new ArgumentNullException("value");

        if (_encoding == null || !_encoding.Equals(value)) {
            _encoding = value;
            _encoder = null;   // flush cached encoder

            if (_httpWriter != null)
                _httpWriter.UpdateResponseEncoding();
        }
    }
}

一目瞭然