【问题标题】:VS2005 UTF-8 generic HTTP handler: issues with certain chars in query string (e.g. þ æ)VS2005 UTF-8 通用 HTTP 处理程序:查询字符串中某些字符的问题(例如 þ æ)
【发布时间】:2010-01-21 19:17:24
【问题描述】:

我正在 VS2005 中开发一个通用的 HTTP 处理程序并在调试模式下对其进行测试。它工作得很好,除非查询字符串包含高位字符,例如拉丁文小写字母 Thorn /u00FE þ 和拉丁文小写字母 Ae /u00E6 æ

我机器上的 IE8 设置为发送 UTF-8 URL。我在调试代码时在IE8地址栏中输入以下内容:

http://app/myHandler.ashx?term=foo // 一切正常 http://app/myHandler.ashx?term=þorn // 不起作用 -- 从数据库查询失败

数据库是 SQLite,它使用 UTF-8 编码并且工作正常。当使用其他 GUI 工具或使用 Visual Studio 的 System.Data.SQLite GUI 插件直接针对 SQLite 发出查询时,使用这些特殊字符的查询可以正常工作。

我是否正确解码了查询字符串中的值? GetString() 不解码字节吗?

公共标准请求(HttpContext 上下文) { UTF8Encoding utf8 = new UTF8Encoding(); if (context.Request.QueryString["term"] != null) { byte[] w = utf8.GetBytes(context.Request.QueryString["term"]); word = utf8.GetString(w); ...

在 HTTP 处理程序中,ContentEncoding 设置为 UTF-8:

 context.Response.ContentEncoding = System.Text.Encoding.UTF8;

并且在调试器的本地窗口中,Request.ContentEncoding 也是 UTF-8。

但是当我在本地窗口中检查查询字符串值时,查询字符串 'þorn' 中的 term 值显示为 '[] orn' 这就是它在我发送到数据库的 sql 语句中的显示方式。就好像这个角色没有被识别一样。

我在从查询字符串中获取值并转换为字符串的方式上做错了吗?

【问题讨论】:

    标签: utf-8 visual-studio-2005 content-encoding getstring


    【解决方案1】:

    在解码之前,context.Request.QueryString["term"] 在整数中包含什么?也许它已经具有您想要的价值。如果当前字节不是 UTF8,utf8.GetBytes 将无济于事。

    【讨论】:

      【解决方案2】:

      感谢您的提示,eed3si9n。它引导我找到解决方案。

      我的(错误的)印象是 IE 会将手动输入到地址栏中的字符转换为设置中指定的编码。它没有。在那里输入的 URL 必须已经编码。

      【讨论】:

        猜你喜欢
        • 2019-04-30
        • 1970-01-01
        • 1970-01-01
        • 2013-01-16
        • 2013-04-22
        • 1970-01-01
        • 2010-10-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多