2012-07-24 76 views
1

我正在处理以UTF-8编码的POST请求。此POST请求负责在某个文件夹中创建文件。但是,当我查看俄文字符的文件名时,我看到文件名的垃圾值(文件内容正常)。文件名的英文字符可以。在我看到的脚本中:经典ASP将字符串转换为windows-1252

Set fsOBJ= Server.CreateObject("Scripting.FileSystemObject") 
Set fsOBJ= fsObj.CreateTextFile(fsOBJ.BuildPath(Path, strFileName)) 

我相信'strFileName'是我的问题。 Windows似乎不喜欢UTF-8文件名。关于如何解决这个问题的任何想法。

+0

http://stackoverflow.com/questions/916118/classic-asp-how-to-convert-a-utf-8-string-to-ucs-2/920405#920405 – Swati 2012-07-24 20:21:40

+0

感谢您的回应,但我有试试这个单个字母文件名'k'并得到'Рє'。任何其他想法? – roboto1986 2012-07-24 21:23:35

+0

strFileName从哪里来?从POST还是从数据库?如果它来自数据库,那么列/表设置为UTF-8? – TheCarver 2012-07-25 00:53:47

回答

3

VBScript字符串严格是2个字节的Unicode在存储或传输字符串中使用的任何编码在VBScript中存在的字符串之前转换为unicode。

我的猜测是你有表单文章携带的文件名称和帖子编码为UTF-8。但是,在解码带有文件名的表单字段时,您的接收页的CodePage设置为65001(UTF-8代码页)以外的内容。结果从窗体中检索到的字符串已损坏。

<%@ CODEPAGE=65001 %>添加到您的页面,将Response.CharSet = "UTF-8"添加到页面顶部并保存为UTF-8。

现在当源表单向页面发布UTF-8编码形式的数据时,表单数据将被正确解码为Unicode。

+0

有趣。是的,当POST发生时,我的表单POST确实将文件名编码为UTF-8。这是我无法改变的,因为POST来自嵌入式设备。我确实将IIS上的CodePage设置为65001,但后来我的脚本无法工作......它似乎只能在65001以下的CodePage上工作。我确实注意到了这一点文件名更改为不同的代码页。因此,也许我需要做的就是将其设置为65001而不会崩溃。我的主要开发环境是Linux,并且我没有随亲版本提供的MS VS2010调试工具。 – roboto1986 2012-07-25 13:10:15

+0

我还应该提到我遵循http://msdn.microsoft.com/en-us/library/ms525789%28v=vs.90%29.aspx。我唯一的问题是在IIS中设置65001,但我想我不需要,如果codepage指定在我的ASP文件的顶部... – roboto1986 2012-07-25 13:49:37