我有一個應用程序從PHP中編寫的某些Web服務接收XML,並將其插入到SQL Server數據庫中。當我嘗試插入包含波蘭的變音字符接收XML,我得到這樣的錯誤:在SQL Server中將UTF8轉換爲uTF16
XML分析:行2,字符703,非法XML字符
我試圖做類似此:
DECLARE @xml XML;
SET @xml = '(here I paste some sample XML that contains diacritical characters)';
SELECT @xml = CAST(@xmlstr AS XML);
INSERT INTO vos_DirectXML_ut(ValidXML,synchronization_time,synchronization_type,MethodName)
VALUES(@xml,GETDATE(),@SynchroType,@method);
ValidXML
是XML
類型列。
我用Google搜索找到了一些解決方案,我發現UTF8字符串: http://msdn.microsoft.com/en-us/library/ms160893(v=sql.90).aspx
我安裝了它,並試圖XML轉換爲UTF8字符串,然後再次將其轉換爲正常varchar
,然後XML
,並將其插入到我的表,但看起來它不會更改此XML內的任何字符,它只是改變了變量的類型,並沒有解決我的問題。
我還發現了一些人的建議,可以通過編寫一個程序來處理變量中的每個字符(我的情況是XML)並手動更改它的編碼來解決類似的問題,但是這個人也說可能工作緩慢。這真的是解決我的問題的唯一選擇嗎?
它幫助,雖然我不得不添加一行: SET @xmlstr = REPLACE(@ xmlstr, '編碼= 「UTF-8」', '') ; 因爲沒有從XML頭去除聲明編碼,它說: XML解析:行1,字符38,無法切換編碼 感謝您的幫助 – Konrad
請提供您的代碼示例與XML。 – Devart
@Konrad因爲它會更好地用UTF-16替換UTF-8:REPLACE(@xmlstr,'encoding =「UTF-8」','encoding =「UTF-16」') *是* utf-16編碼(這就是領先的'N'的意思)。 –