You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP Classic使用ShadowUpload处理希伯来文表单上传的编码错误问题

解决ASP Classic + ShadowUpload.asp希伯来文编码乱码及Stream.ReadText报错问题

问题核心

  1. 乱码原因:前端用UTF-8提交希伯来文,但ShadowUpload默认用系统编码(如Windows-1255)解析,编码不匹配导致乱码。
  2. 80070057报错:Stream.ReadText未指定UTF-8编码,Stream默认用系统编码读取UTF-8字节流,触发参数错误。

修复步骤

1. 全局编码配置(所有ASP页面头部)

保留以下配置,注意顺序:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%
Response.Charset = "UTF-8"
Session.CodePage = 65001
Session.LCID = 1037 ' 希伯来语区域ID
%>

2. 修改ShadowUpload.asp的编码逻辑

找到负责转换字节流为字符串的BytesToStr函数(或所有调用ADODB.Stream.ReadText的代码),显式指定UTF-8编码:

Function BytesToStr(Bytes)
    Dim Stream
    Set Stream = Server.CreateObject("ADODB.Stream")
    Stream.Type = 1 ' adTypeBinary
    Stream.Open
    Stream.Write Bytes
    Stream.Position = 0
    Stream.Type = 2 ' adTypeText
    Stream.Charset = "UTF-8" ' 关键:强制用UTF-8解析
    BytesToStr = Stream.ReadText
    Stream.Close
    Set Stream = Nothing
End Function

若ShadowUpload中无单独BytesToStr函数,直接在所有切换到文本模式的Stream对象上添加Stream.Charset = "UTF-8"。

3. 确保前端表单编码一致

  • 给表单添加accept-charset="UTF-8"属性:
<form action="forms_script.asp" method="post" enctype="multipart/form-data" accept-charset="UTF-8">
    <!-- 表单字段 -->
</form>
  • 页面头部添加编码声明:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

4. 数据库存储适配(若涉及)

  • 数据库表字段用支持UTF-8的类型:如SQL Server用NVARCHAR,MySQL用utf8mb4字符集。
  • 用参数化查询插入/读取数据,避免手动拼接SQL导致编码丢失。

额外排查点

  • 检查IIS站点设置:确保站点HTTP响应头的内容类型包含charset=utf-8。
  • 清理ShadowUpload中所有硬编码的非UTF-8设置(如Charset = "windows-1255")。

内容的提问来源于stack exchange,提问作者Noam Smadja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 21:22:46