更完美的解决“无效的过程调用或参数: 'Chr'”

作者:vkvi 来源:千一网络(原创) 日期:2010-6-21

“无效的过程调用或参数: 'Chr'”这个错误出现最多的是在无组件上传中。

网上很多人的解决方案是将字节转换成字符串的函数(比如 bin2str)中的一个 Chr 函数改为 ChrW。

好了,现在不报错了,但这并不代表结束了,因为此时提交的中文是乱码。

原因

如果当前线程使用的是单字节字符集 (SBCS),那么 Chr 函数参数的取值范围就很有限,只有 0 到 255(DBCS 是 -32768 到 65535),正因为 Chr 函数参数的取值范围被限制在了 0-255,这就决定了遇到中文会出错。

如果我们把 Chr 改为 ChrW,ChrW 参数的取值范围是 -32768 到 +65535,与区域性和代码页设置无关,所以不会报错。

虽然 ChrW 它可以处理负数,但并不代表 ChrW(-10544) 就等效于 DBCS 中的 Chr(-10544),所以造成了乱码。

解决办法

在客户端提交时,利用 JavaScript 的 escape 函数给提交的内容编码。

服务器端还是像上面的将 Chr 改为 ChrW,由于值是经过 escape 编码的,所以不会出现乱码。再建立一个 js 版的 ASP 函数:

<script language="jscript" runat="server">
function jsUnescape(str)
{
    return unescape(str);
}
</script>

然后在 ASP 中将取得的表单值经 jsUnescape 转换,中文就出来了。

有个问题就是文件上传框中的内容无法改 escape,改了文件都上传不了,也就是说如果使用了中文的文件名,则仍然是乱码,不过关系不大,因为我们一般都不用客户端提交的文件名,而是另外起一个随机文件名。

相关阅读

你前面那位网友看了:form 提交时不能禁用提交按钮

▲▲▲嘿,欢迎转载传播本站原创文章,尽量保留来源噢。▲▲▲

文章评论
  • 1 楼:*
    *
赞助商们
vkvi
vkvi

作者简介: vkvi,致力于 .NET Web 开发、移动开发的技术推广,在 .NET、SQL Server、Windows Server 等方面有深入研究和丰富经验,10 年间共计撰写文章 4000 余篇。 主持金融、国土、农业、电商等多个行业项目执行, 推行“技术提升生产力、人心决定成功率”的管理理论。 联系他