ASP Classic 应用程序中的多部分/表单数据和 UTF-8

2023-12-27

我有一个问题我真的不明白。 我正在尝试在 ASP 经典应用程序中上传文件,而不使用外部组件。我还想发布一些将存储在数据库中的文本。 文件上传完美,我正在使用以下代码:

问题是其他表单输入字段。我使用的是 UTF-8,但它们最终并不是 UTF-8。即,如果我使用 Response.Write 打印瑞典语字符 å ä 和 ö,它们将显示为问号。

我已将文件保存为 UTF-8(带 BOM),我添加了元标记来告诉页面它是 UTF-8。我已经设置了 Response.CharSet = "UTF-8"。

从二进制转换为字符串的函数如下所示(这是我能想到的唯一可能错误的地方,因为注释说它提取 ANSI 字符,但我认为它应该提取 Unicode 字符):

Private Function CStrU(ByRef pstrANSI)

    ' Converts an ANSI string to Unicode
    ' Best used for small strings

    Dim llngLength ' Length of ANSI string
    Dim llngIndex ' Current position

    ' determine length
    llngLength = LenB(pstrANSI)

    ' Loop through each character
    For llngIndex = 1 To llngLength

        ' Pull out ANSI character
        ' Get Ascii value of ANSI character
        ' Get Unicode Character from Ascii
        ' Append character to results
        CStrU = CStrU & Chr(AscB(MidB(pstrANSI, llngIndex, 1)))

    Next

End Function

我创建了一个测试 asp 页面 (multiparttest.asp) 来复制此内容,需要 Lewis E. Moten 的上传内容才能使其正常工作(我已将他的文件添加到名为 upload 的子目录中)。

<%Response.CharSet = "UTF-8" %>
<!--#INCLUDE FILE="/upload/clsUpload.asp"-->
<html>
    <head>
        <title>Test</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    </head>
    <body>
        <%
        Set objUpload = New clsUpload
        Response.Write( objUpload.Fields("testInput").Value )
        %>
        <form method="post" enctype="multipart/form-data" action="multiparttest.asp">
            <input type="text" name="testInput" />
            <input type="submit" value="submit" />
        </form>

    </body>
</html>

我已经在 Firefox 中使用 LiveHTTP 标头捕获了请求,并将其保存为 UTF-8 文件,瑞典字符看起来应该如此(它们在 LiveHTTP 标头 GUI 中看起来不太好,但我猜 GUI 它是这样的) self 没有使用正确的编码)。 POST 请求如下所示:

http://localhost/testsite/multiparttest.asp

POST /testsite/multiparttest.asp HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://localhost/testsite/multiparttest.asp
Cookie: ASPSESSIONIDASBBRBTT=GLDJDBJALAMJFBFBDCCIONHF; ASPSESSIONIDAQABQBTT=DIPHILKAIICKJOIAIMILAMGE; ASPSESSIONIDCSABTCQS=KMHBLBLABKHCBGPNLMCIPPNJ
Content-Type: multipart/form-data; boundary=---------------------------7391102023625
Content-Length: 150
-----------------------------7391102023625
Content-Disposition: form-data; name="testInput"

åäö
-----------------------------7391102023625--

HTTP/1.x 200 OK
Cache-Control: private
Content-Length: 548
Content-Type: text/html; Charset=UTF-8
Server: Microsoft-IIS/7.0
X-Powered-By: ASP.NET
Date: Tue, 10 Nov 2009 14:20:17 GMT
----------------------------------------------------------

任何有关此事的帮助都将不胜感激!

编辑 10/11:

我尝试将所有这些添加到 asp 文件的顶部,因为我在其他地方找到了关于此问题的不同建议,但没有不同的结果。

<%@Language=VBScript codepage=65001 %>
<%Response.ContentType="text/html"%>
<%Response.Charset="UTF-8"%>
<%Session.CodePage=65001%>

编辑 11/11:

这个问题似乎相关,当表单作为 multipart/form-data 发布时,UTF-8 文本出现乱码 https://stackoverflow.com/questions/546365/utf-8-text-is-garbled-when-form-is-posted-as-multipart-form-data。但他们不使用 ASP 或 IIS。是否可以在 IIS 中为 multipart/form-data 设置某种字符编码?我用的是IIS7。也许我的请求确实有错误的编码? (我现在真的迷失在字符编码世界中)


您对 CStrU 的分析是正确的。它假设客户端正在发送单字节 ANSI 字符。它还假设客户端使用的代码页和运行 VBScript 的语言环境是相同的。

当使用 UTF-8 时,CStrU 所做的假设总是不正确的。据我所知,没有一个语言环境以 65001 作为其代码页(我认为有一两个使用 65000,但这又不同)。

这是一个假设文本采用 UTF-8 格式的替换函数:-

 Private Function CStrU(ByRef pstrANSI)

  Dim llngLength '' # Length of ANSI string
  Dim llngIndex '' # Current position
  Dim bytVal
  Dim intChar

  '' # determine length
  llngLength = LenB(pstrANSI)

  '' # Loop through each character
  llngIndex = 1
  Do While llngIndex <= llngLength

   bytVal = AscB(MidB(pstrANSI, llngIndex, 1))
   llngIndex = llngIndex + 1

   If bytVal < &h80 Then
    intChar = bytVal
   ElseIf bytVal < &hE0 Then

    intChar = (bytVal And &h1F) * &h40

    bytVal =  AscB(MidB(pstrANSI, llngIndex, 1))
    llngIndex = llngIndex + 1

    intChar = intChar + (bytVal And &h3f)

   ElseIf bytVal < &hF0 Then

    intChar = (bytVal And &hF) * &h1000

    bytVal =  AscB(MidB(pstrANSI, llngIndex, 1))
    llngIndex = llngIndex + 1

    intChar = intChar + (bytVal And &h3F) * &h40

    bytVal =  AscB(MidB(pstrANSI, llngIndex, 1))
    llngIndex = llngIndex + 1

    intChar = intChar + (bytVal And &h3F)

   Else
    intChar = &hBF
   End If

   CStrU = CStrU & ChrW(intChar)
  Loop

 End Function

请注意,随着 CStrU 被纠正为 UTF-8,示例页面的输出现在看起来是错误的。将文件的代码页设置为 65001 的建议也是一项要求。由于您将发送到客户端的 CharSet 设置为“UTF-8”,因此您还需要告诉 ASP 在对使用 Response.Write 写入的文本进行编码时使用 UTF-8 代码页。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP Classic 应用程序中的多部分/表单数据和 UTF-8 的相关文章

  • 使用 SingleChildScrollView 时无法向下拖动底部工作表

    我创建了一个带有bottomsheet 和listview builder 的应用程序 在底部 有一个文本按钮 当我将其向上拖动时 底部工作表必须出现 底页上有一张表格 我用 SingleChildScrollView 包裹底部纸张 但是当
  • RestClient发送IFormFile

    我从我的控制器收到一个文件 public async Task
  • Select2 基本示例不起作用

    我想得到select2使用 symfony2 脚本的库 我正在尝试实现提供的基本示例https select2 github io examples html https select2 github io examples html pa
  • ActionDispatch::Http::UploadedFile.content_type 在 Rspec 测试中未初始化

    背景 我有一个Book模型与一个cover file通过我的 Rails 控制器之一使用上传的文件设置的属性 我正在使用 Rails v4 0 4 Goal 我想测试是否仅保存具有特定内容类型的文件 我计划创建 Rspec 测试示例Acti
  • 使用哈希检查具有 $_POST 值的页面是否已刷新

    当将表单发布到同一个PHP页面时 正确的方法是什么来查找页面是否被意外刷新而不是再次提交 这是我现在正在使用的 tmp implode POST myHash md5 tmp if isset SESSION myHash SESSION
  • 如何在PHP中设置文本文件编码?

    如何在 PHP 中设置文本文件编码 例如 UTF 8 让我告诉你我的问题 这是我的代码 Output fwrite 具有类似的输出 但是当我创建test txt通过记事本并设置字符集UTF 8输出就是我想要的 我想在 PHP 文件中设置字符
  • 当地语言的布尔值

    这个问题很久以前就被问过服务器故障 https serverfault com questions 274964 iis 7 5 using classic asp converts a boolean value to a string
  • 如何从symfony2中的表单对象获取每个字段的错误消息?

    我按照这个教程http symfony com doc current forms html http symfony com doc current forms html我完美地呈现了我的插入表单 但只有一个问题我无法解决 当表单无效时
  • 在 Angular 4 Reactive Forms 中提交时显示验证消息

    我正在使用 Angular 4 反应式表单 我想在用户单击 提交 创建帐户 按钮时显示验证错误消息 这是我正在使用的 HTML 和打字稿代码
  • UTF8 vs. UTF16 vs. char* vs. 什么?谁来给我解释一下这个烂摊子!

    我已经设法忽略所有这些多字节字符的东西 但现在我需要做一些 UI 工作 我知道我在这方面的无知将会赶上我 谁能用几段或更少的内容解释我需要知道什么 以便我可以本地化我的应用程序 我应该使用什么类型 我同时使用 Net 和 C C 并且我需要
  • 如何获取表单的onSubmit事件?

    我想知道如何抢onsubmit表单中的事件来进行一些表单验证 因为我无权直接访问它 我正在编写一个用于评论的 WordPress 插件 因此无法直接访问表单标签或提交按钮 我在尝试为我的插件执行此操作时感到非常沮丧 因此我在下面编写了一个
  • 如何修复 Python 中损坏的 utf-8 编码?

    我的字符串是Ni m B T t Thi n s Nh t H nh 我想将其解码为Ni m B T t Thi n s Nh t H nh 我在那个网站上看到可以做到这一点http www enderminh com minh utf8
  • asp classic 登录时获取用户IP

    我们有员工考勤制度 它是用 asp classic 编写的 带有 MS ACCESS 数据库 其中存储用户信息及其登录时间 我想添加一件额外的事情 我可以从用户登录的地方看到他们的工作站 IP 地址 我们相信 即使某人不在办公室 某人也会替
  • Django 表单验证消息未显示

    我试图限制可以以表单上传的文件类型 大小和扩展名 该功能似乎有效 但未显示验证错误消息 我意识到if file size gt 4 1024 1024可能不是最好的方法 但我稍后会处理这个问题 这是 forms py class Produ
  • ASP MVC.NET3 本地 IIS7 对象引用错误

    在开发 mvc Web 应用程序期间 我遇到了运行站点本地实例的问题 当我尝试重新加载页面时 在首次加载成功后 我看到以下错误 如果我通过 VS 虚拟服务器运行该站点 则不会出现任何问题 我的应用程序池正在集成模式下运行 并且正在运行 ne
  • .js.erb VS .js

    将 Rails 应用程序的 javascript 放入 js erb 文件而不只是将其放入 application js 文件有什么好处 我有一个企业创建按钮 因此我应该将代码放入 create js erb 文件中 还是使用以下方法将其放
  • 如何使用 D3 (或只是 javascript)将表单选项设置为“选择”

    有没有一种方法可以搜索选择表单元素中的所有选项 并将具有匹配值的选项指定为 已选择 var xStat G var statOptions Points PTS Goals G Assists A Penalty Minutes PIM c
  • HTTP 403 Forbidden:访问被拒绝 ASP.NET Web API

    在生产服务器上运行 ASP NET Web API 项目时 我收到以下错误 403 禁止 访问被拒绝 您没有权限查看 使用您提供的凭据访问此目录或页面 查看 IIS 7 0 错误日志 基本错误是 403 14 目录列表被拒绝 我已经配置了生
  • 在 Objective-C iPad 开发中发布

    我正在尝试发出 POST 请求 但我似乎无法弄清楚出了什么问题 我从服务器收到响应 但我的电子邮件 密码对似乎没有正确发送 读取 由服务器 它告诉我不存在这样的帐户 这是我的代码 它包含在一个函数中 当用户按下我创建的 登录 按钮时调用该函
  • 使用 PHP 将表单数据发送/发布到 URL [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有一个通过 POST 提交的表单 提交表单后我捕获变量 如何连接表单数据 然后将其 POST 到 url 然后重新定向到感谢页面 这不是确

随机推荐

  • 测试点是否在匹配的引号之间 (emacs lisp)

    我们如何检查是否 point 在匹配的 引号 内 示例 1 point 但不在范围之内 示例 2 此处引用 point 那里引用 在 Emacs Lisp 中 您正在寻找的是syntax ppss 定义于syntax el 它返回 10 个
  • 如何在Python中捕获自定义异常[重复]

    这个问题在这里已经有答案了 我正在使用一个 python 库 其中在某一时刻定义了一个异常 如下所示 raise Exception Key empty 我现在希望能够捕获该特定异常 但我不知道该怎么做 我尝试了以下方法 try raise
  • C++ 中的比较性能( foo >= 0 与 foo != 0 )

    我最近一直在写一段代码 其中性能非常重要 基本上我有以下情况 int len some very big number int counter some rather small number for int i len i gt 0 i
  • flutter:带有后备文本的 CircleAvatar

    我正在学习 Flutter 想做一个Widget就像内置的一样CircleAvatar 但是 我希望这种行为是 指定图像 NetworkImage 和缩写 即 BB 当图像未加载时 显示缩写 如果图像加载 则显示图像并删除缩写 下面的代码可
  • 实现惰性函数式语言

    当实现惰性函数式语言时 有必要将值存储为未计算的 thunk 仅在需要时才进行计算 有效实施的挑战之一 如在例如中所讨论的 无脊椎无标签 G 机 是这个评估必须对每个重击执行一次 并且后续访问必须重用计算值 如果不这样做将导致至少二次方减速
  • 为什么我无法减小该文本的行高?

    http jsfiddle net mJxn4 http jsfiddle net mJxn4 这很奇怪 我有几行文本包裹在 em 标签 无论我做什么 都会降低价值line height低于 17px 没有效果 我可以撞line heigh
  • Flash/Flex 跨域问题 - 对来自 AWS S3 的图像使用 BitmapData.draw() 会导致 SecurityError:错误 #2122:违反安全沙箱

    我在 DisplayObject 上使用 BitmapData draw 其中包含来自我的 AWS S3 存储桶的图像 当我将 S3 图像 URL 设置为 Image 对象的源时 图像在 swf 中加载正常 但当我在其上使用 BitmapD
  • magento 中的货币符号

    我用两种不同的语言创建了两个 Magento 商店视图 English Dutch 英语 EURO 货币符号以正确的方式出现 例如 20 00 但对于荷兰语视图 它显示为 20 00 EUR 我想为两种视图设置默认符号 因为欧元是相同的 我
  • 哪个 magento 表包含产品图像名称?

    我遇到的问题是我使用 Magmi magento 产品导入开源解决方案 导入产品 但我在前端看不到产品图像 我需要知道 magento 数据库中的哪个表包含图像名称 以便我可以直接以某种方式提供它 Catalog product entit
  • PHP 停用词列表

    我正在代码中使用停止词 我有一个充满我想要检查的单词的数组 以及一个我想要检查的单词数组 目前 我一次循环一个数组 并删除该单词 如果其 in array 与停用词列表 但我想知道是否有更好的方法来做到这一点 我已经查看了 array di
  • 有没有办法同时查看两个 Laravel Mix Webpack 配置文件是否有任何更改?

    使用 Laravel Mix 是否可以使用一个命令查看两个 Webpack 配置文件 以便对任何底层文件的更改立即导致必要的文件被编译 具体来说 我有以下两个与 Laravel Mix 一起使用的 Webpack 配置文件 webpack
  • 现代英特尔处理器有多少种超标量方式?

    我刚刚了解了超标量处理器 https en wikipedia org wiki Superscalar processor https en wikipedia org wiki Superscalar processor 我还了解到 随
  • SqlBulkCopy - 给定的 ColumnName 与源或目标中的任何列都不匹配

    我正在尝试使用 SqlBulkCopy 将数据复制到 SQL 数据库表中 但它 错误地 说列不匹配 他们确实匹配 如果我使用断点来查看正在映射的列的名称 它们是正确的 错误消息显示了列的名称 并且它是正确的 这是我的方法 我有一个相同的方法
  • 根据String生成唯一的Hash码

    我有以下两个字符串 var string1 MHH2016 05 20MASTECH HOLDINGS INC Financialshttp finance yahoo com q is s mhhEDGAR Online Financia
  • 将数据框折叠成单行并基于 R 行创建新列

    我有一个包含对象名称和该对象的统计矩列表的数据框 如下所示 Object Mean IQR Skew x 1 1 1 y 2 2 2 z 3 3 3 我想要的是为每一行创建带有统计矩和对象名称前缀的列 就像这样 xMean xIQR xSk
  • 如何编写递归打印程序

    Gurus 我想知道如何编写一个打印的递归函数 1 12 123 1234 例如 display 4 应该打印 1 12 123 1234 Code include
  • Redux router - 刷新后如何重放状态?

    我有一个多步骤表单应用程序 我正在努力思考如何保存我的 redux 状态并在刷新后重播它 在应用程序中后退 前进按预期工作 但浏览器刷新后 我之前的状态为空 理想情况下 我希望能够将先前的状态保存在与路径相关的会话存储中 以便稍后重播 但我
  • 在 HTML 画布中创建链接

    是否可以从 canvas 元素中呈现的文本创建 html 链接 没有简单的方法 您必须将链接文本绘制到画布上 然后检查鼠标单击情况 这是一个演示 html 页面
  • 与泛型的多重绑定

    我正在尝试创建一个Multibinder
  • ASP Classic 应用程序中的多部分/表单数据和 UTF-8

    我有一个问题我真的不明白 我正在尝试在 ASP 经典应用程序中上传文件 而不使用外部组件 我还想发布一些将存储在数据库中的文本 文件上传完美 我正在使用以下代码 问题是其他表单输入字段 我使用的是 UTF 8 但它们最终并不是 UTF 8