2016-02-09 85 views
0

我想在SQL Server中正確編碼俄文字符。我正在使用SQL Server的fnEncodeURL方法。SQL Server中的俄文字符編碼

例如:

select dbo.fnEncodeURL('пвы Открытые панели для совместной работы .') 

其示出了我

%3F%3F%3F%20%3F%3F%3F%3F%3F%3F%3F%3F%20%3F%3F%3F%3F%3F%3F%20%3F%3F%3F%20%3F%3F%3F%3F%3F%3F%3F%3F%3F%3F%20%3F%3F%3F%3F%3F%3F%20. 

%3F意味着?因此,如果我們將其解碼它會被「??? ???????? ?? 「......」

這是不正確。

所以,請讓我知道正確的方法,這樣我可以在結果得到俄語字符,而不是問號。

在此先感謝

+0

你用的,而不是NVARCHAR VARCHAR?把你的函數代碼 –

+0

'select dbo.fnEncodeURL(N'пвыОткрытыепанелисовместнойработы。')'在開始時加上N可能會幫助你 –

+3

'fnEncodeUrl'將URL上的文本編碼爲安全的 - 作爲名字的功能已經暗示。這是**不**你需要做什麼**在你的SQL Server數據庫中存儲**這樣的文本!只需使用'NVARCHAR'作爲你的數據類型,並且如果你從腳本中插入文本作爲**字符串**,那麼用'N'字符預先安排你所有的Unicode字符串:'declare @str NVARCHAR(50)= N' .......「' –

回答

0

你的URL編碼函數使用VARCHAR的數據類型和你傳遞一個NVARCHAR字符串非ASCII字符。

例如看到這個:

select CONVERT(varchar,N'пвы Открытые панели для совместной работы .') 

回報

??? ???????? ?????? ??? ?????? 

您需要更換所有VARCHAR S IN的程序是NVARCHAR

如果你說話時是需要有關this fnEncodeURL重新定義輸入參數和返回類型,如下所示:

CREATE FUNCTION dbo.fnEncodeURL 
(
    @strInput varchar(8000) -- Note: String will get longer, so may overrun 8,000 characters 
) 
RETURNS varchar(8000) 

應該

CREATE FUNCTION dbo.fnEncodeURL 
(
    @strInput Nvarchar(8000) -- Note: String will get longer, so may overrun 8,000 characters 
) 
RETURNS Nvarchar(8000) 

您還需要添加所有的轉換在該功能的替代邏輯,我不知道的規則。

您還可以考慮使用SQLCLR並使用現有的.NET庫,如SQL#,作者爲@srutzky

+0

謝謝湯姆,這對我來說很有效......但它顯示的是相同的俄羅斯字符,而不是編碼格式,如%D0%BF%D0%B2% D1%8B%20%20%D0%9E%D1%82%D0%BA%D1%80%D1%8B%D1%82%D1%8B%D0%B5%20%D0%BF%D0%B0% D0%BD%D0%B5%D0%BB%D0%B8%20%D0%B4%D0%BB%D1%8F%20%D1%81%D0%BE%D0%B2%D0%BC%D0% B5%D1%81%D1%82%D0%BD%D0%BE%D0%B9%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B%0A –