2

我的公司只是將許多列從varchar轉換爲nvarchar。ASP服務器端代碼如何破壞智能報價?

現在看來,當我們向屏幕呈現一個智能報價(即ALT + 0146'),然後將其發送回SQL Server 2000數據庫以進行持久化時,智能報價將被破壞爲「 - 」。

我的問題:

怎麼可能ASP服務器端代碼腐敗智能報價」?

編輯:看來,我的問題是類似this one。順便提一下,Powerpoint內容將智能報價引入了混合。不過,正如我之前所說,我正在處理一個ASP頁面,而引用的問題與PHP頁面有關。

編輯:服務器端指令CODEPAGE=65001使頁面呈現正確,但它仍然帖子內容爲「西歐」在Windows 2000框。有誰知道爲什麼?

回答

0

VBScript可能會破壞Unicode字符;特別是在舊版本的IIS上(即Windows Server 2000上的IIS 5.0)。

在我的情況下,一個For Each結構是怪罪。

下面是一些示例代碼,一個POST之後執行:

Response.Write Request.Form("selOptions")(0) ' A-OK! - Displays Unicode characters fine! 
For Each sOption in Request.Form("selOptions") 
    Response.Write sOption ' Bad! Unicode characters are mangled! 
Next 

與往常一樣,您的里程可能會有所不同。

2

它看起來像是做了ANSI和Unicode之間的隱式轉換(並在過程中選擇了錯誤的代碼頁)。您可能需要手動進行轉換並提供正確的代碼頁。沒有看到代碼很難說。

1

雖然您確實需要告訴服務器使用哪種編碼,但是您告訴客戶端頁面編碼是什麼嗎?如果不是這樣,客戶將很高興地發佈用戶最後明確選擇的任何編碼,或系統默認編碼,這可能在大多數美國或西歐機器上是西歐。

在您的HTML,你有這樣的東西在你的<頭>?

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

你也可以讓服務器在你的Response.Headers中明確地發送這個。儘管我認爲將它發送到HTTP標頭是個不錯的主意,但將它包含在HTML中對於決定將文檔保存爲任何原因的人員也很有幫助。

+0

+1:好點。是的,我*在頭節點內部有元標記。但是,我不認爲我已經要求服務器在響應頭中顯式地發送它。是否有我應該看的配置設置? – 2010-06-21 20:54:02

+1

如果您正在執行html方法,則不需要。雖然我認爲在IIS中有一個用於站點範圍HTTP標頭的配置選項,但我認爲除非您確定所有頁面都處理UTF-8,否則應用它不是個好主意。 – JasonTrue 2010-06-21 21:14:15

+1

%E2%80%99,實際上是智能引擎的UTF-8。你使用參數化查詢嗎?該參數化查詢中的類型是否設置爲SQL的NVARCHAR類型?如果您沒有使用參數化查詢,您是否在SQL中使用了Unicode標記? (例如N'mytext')?最後,在閱讀表單值之前,您可能需要設置Request.CodePage = 65001。 – JasonTrue 2010-06-21 21:18:40

相關問題