热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ASP文件编码格式与Server.URLEncode

最近在修改一个遗产程序,因为要下载文件,而这些文件大部分都是以中文命名的,中文的处理对于一些新兴的语言,比如Java,.net什么的都没有问题,可是这是个asp程序。当我把asp文件采用

最近在修改一个遗产程序,因为要下载文件,而这些文件大部分都是以中文命名的,中文的处理对于一些新兴的语言,比如Java,.net什么的都没有问题,可是这是个 asp 程序。
当我把asp文件采用本地编码时,Server.URLEncode就会使用本地编码来处理,而当我使用UTF-8编码来保存asp文件的时候,它也会自动的采用UTF-8来处理Server.URLEncode,也就是说:
那我的姓“周”举例子吧:
GBK____%D6%DC_____0xD6DC(55004)
UTF-8__%E5%91%A8__U+5468(21608)__周

从上面我们可以看到,当我的asp文件保存成ansi格式的时候,URLEncode就会输出%D6%DC,当我把asp文件保存成UTF-8的时候,它就会输出%E5%91%A8。

而apache,iis处理URLEncode的时候都是使用的UTF-8处理的,可是这个遗产程序是GBK编码的,我不可能仅仅修改那一个asp文件的编码为UTF-8,因为这样那些有bug的IE在页面切换的时候就会发生混乱。而且当我打算把整个程序的asp文件都转成UTF-8的时候,我发现Vbscript中的文件输出对UTF-8的支持又很差,虽然我后来找到了输出的解决方法,但是我要测试几乎所有的页面,那是一件很痛苦的事情,调试过asp的人都知道,那莫名其妙的500错误,会让你焦头烂额的,如果不是那些对asp由极大的热情和经验,你根本做不下去。我就是这样的,没有热情,甚至有些讨厌,而且没有足够的经验,它的那些函数的记忆简直比记忆英语单词还难(我好像用错句型了,本来就是比英文单词的记忆还难的)。

所以我期望能够有一个像 java.net.URLEncoder.encode(myString, "UTF-8") 这样的函数,基于我对Vbscript的数量程度不够,我都快把搜索引擎搜趴下了(^_^),都没有找到我想要的,后来,我准备根据java代码来写一个Vbscript的实现,可是当我看到十几行的java代码后我退缩了,不是因为我害怕java代码,而是我清楚我对Vbscript的了解,我无法在一天的时间内完成。

最终我想到了一个不是方法的方法,我打算采用字典的形式来达到目的:

我先用java生成字典:

import java.io.*;

public class T {
  public static void main(String[] args) throws Exception {
    FileOutputStream fos = new FileOutputStream("C://URLEncoding.txt");
    OutputStreamWriter w = new OutputStreamWriter(fos, "iso-8859-1");
    String s = null;
    for (int i = 0; i <= 0xFFFF; i++) {
      s = "" + (char) i;
      w.write(i + "=" + java.net.URLEncoder.encode(s, "UTF-8"));
      w.write("/r/n");
    }
    w.close();
    fos.close();
  }
}

然后用ASP查询字典来进行URLEncode(下面这段是柠檬( http://3rgb.com)帮忙写的):

<%

dim arrDic
Dim objFSO,objFile,strTemplate,strFileName
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(Server.MapPath("./") & "/URLEncoding.txt", 1)
strSource = objFile.ReadAll
set objFSO = nothing
set objFile = nothing
arrDic = split(strSource, vbcrlf)

Function utfoutstr(str)
dim i,j,k,cc,dd,outStr,utfStr
j = Ubound(arrDic) - 1
for k = 1 to len(str)
 cc = ascw(mid(str,k,1))
 for i = 0 to j
 dd = split(arrDic(i),"=")
  if clng(cc) = clng(dd(0)) then
   utfStr = dd(1)
   exit for
  end if
 next
outStr = outStr & utfStr
next
utfoutstr = outStr
end function

 

with response
'.write Ubound(arrDic)
.write utfoutstr("周树群")

end with

%>

哦,天那,这就是我的最终代码,我发现效果不错。

哦,天那,这就是我的最终代码,我发现效果不错。

不过最后我用到我的程序中发现,压根不管用。

因为编码后的东西是作为参数传给Response.Redirect的,虽然我替换了:,/,.三个符号,还是报错,我猜测是因为Response.Redirect会自己调用Server.URLEncode或者做相似的处理。

我放弃了,我不用改了。

不过我明白了一些函数,chrW,ascW之类的。

也知道了确信了,以后再也不用asp的坚定信念,妈呀,简直噩梦。

几个有用的参考:
http://www.shaoys.com/testart/ShowThesis.asp?DocID=Y2004M11D04H05m12s05
http://blog.csdn.net/daviva/archive/2004/09/21/111564.aspx


推荐阅读
  • Web动态服务器Python基本实现
    Web动态服务器Python基本实现 ... [详细]
  • 从理想主义者的内心深处萌发的技术信仰,推动了云原生技术在全球范围内的快速发展。本文将带你深入了解阿里巴巴在开源领域的贡献与成就。 ... [详细]
  • 本文将深入探讨 Unreal Engine 4 (UE4) 中的距离场技术,包括其原理、实现细节以及在渲染中的应用。距离场技术在现代游戏引擎中用于提高光照和阴影的效果,尤其是在处理复杂几何形状时。文章将结合具体代码示例,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 【转】强大的矩阵奇异值分解(SVD)及其应用
    在工程实践中,经常要对大矩阵进行计算,除了使用分布式处理方法以外,就是通过理论方法,对矩阵降维。一下文章,我在 ... [详细]
  • 在尝试加载支持推送通知的iOS应用程序的Ad Hoc构建时,遇到了‘no valid aps-environment entitlement found for application’的错误提示。本文将探讨此错误的原因及多种可能的解决方案。 ... [详细]
  • 本文通过C++语言实现了一个递归算法,用于解析并计算数学表达式的值。该算法能够处理加法、减法、乘法和除法操作。 ... [详细]
  • Irish budget airline Ryanair announced plans to significantly increase its route network from Frankfurt Airport, marking a direct challenge to Lufthansa, Germany's leading carrier. ... [详细]
  • 问题场景用Java进行web开发过程当中,当遇到很多很多个字段的实体时,最苦恼的莫过于编辑字段的查看和修改界面,发现2个页面存在很多重复信息,能不能写一遍?有没有轮子用都不如自己造。解决方式笔者根据自 ... [详细]
  • spring boot使用jetty无法启动 ... [详细]
  • 如何从BAM文件绘制ATAC-seq插入片段长度分布图?
    在ATAC-seq数据处理中,插入片段长度的分布图是一个重要的质量控制指标,它能反映出核小体的周期性排列。本文将详细介绍如何从BAM文件中提取并绘制这些数据。 ... [详细]
  • 本文详细介绍了在Linux操作系统上安装和部署MySQL数据库的过程,包括必要的环境准备、安装步骤、配置优化及安全设置等内容。 ... [详细]
  • 本文通过分析一个具体的案例,探讨了64位Linux系统对32位应用程序的兼容性问题。案例涉及OpenVPN客户端在64位系统上的异常行为,通过逐步排查和代码测试,最终定位到了与TUN/TAP设备相关的系统调用兼容性问题。 ... [详细]
  • 本题要求计算一组正整数的最小公倍数(LCM)。输入包括多组测试数据,每组数据首先给出一个正整数n,随后是n个正整数。 ... [详细]
  • c#  项目文件,C#viual studio使用方法
    一、项目文件1)Properties节点下主要存放的是当前程序集相关的信息,如版本号、标题等。双击”Properties“,打开如下项目属 ... [详细]
  • 本文介绍了 PHP 的基本概念、服务器与客户端的工作原理,以及 PHP 如何与数据库交互。同时,还涵盖了常见的数据库操作和安全性问题。 ... [详细]
author-avatar
mobiledu2502862267
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有