2012-07-24 59 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