【发布时间】: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