簡體   English   中英

bcp queryout xml格式文件編碼utf-8 xml文件驗證失敗

[英]bcp queryout xml format file encoding utf-8 xml file validation fail

我必須生成格式為“ =“ UTF-8”的xml文件。我使用了bcp queryout。正在生成xml文件。但是我的問題是xml文件驗證失敗。有人可以幫助我解決這個問題嗎?這是我的代碼。

 DECLARE @xmlBody AS VARCHAR(MAX)= '<?xml version="1.0" encoding="UTF-8"?>'+ CAST(@xmlStr  AS VARCHAR(MAX)) 


       INSERT INTO  [dbo].[MasterXml]   
           ([PurchaseOrderID] ,[Code])          
        values (@PurchaseOrderID, @xmlBody)                         
        Declare @command varchar(8000)          

        SET @command= 'bcp "SELECT TOP 1 [Code] from  [tec_Dev].[dbo].[MasterXml] where PurchaseOrderID='+          
        CAST( @PurchaseOrderID As varchar(20))+'" queryout '            
         +@uploadFolder + CAST(@PurchaseOrderID AS varchar(20))+'.xml' +' -T -N -w -c -C65001'

    print @command

EXEC xp_cmdshell @command 

查看您的代碼,我得到的是[sql-server] ...

SQL Server的VARCHAR類型是1字節編碼的擴展ASCII (取決於相關的COLLATION ),而不是UTF-8 ...

每當SQL Server談論unicode時,它就是本機NVARCHARNCHAR類型,它是2字節編碼的字符串 (實際上是UCS-2 )。

此外,您正在說明一些開關

  • -N :在任何情況下都使用本機類型,對字符使用unicode
  • -w :顯式開關以使用unicode
  • -C :頁面為65001( utf-8 ),而文檔明確告訴您, 此代碼頁不受支持!

如果其他都沒問題,則您的代碼應在磁盤上放置一個2字節unicode的文件 ,但大喊:“我是UTF-8!”。 對XML聲明中的UTF-16嘗試相同的操作。 或者,您可以使用任何其他工具將SQL Server的輸出轉換為您選擇的編碼。

我傾向於C#:直接從SQL-Server(根本沒有BCP)將XML讀入.NET字符串(總是unicode!),然后使用適當的編碼將.Net字符串寫入文件。

更新

在給定的鏈接( SQL Server 2014的BCP文檔 )中,仍然有

**重要** SQL Server不支持代碼頁65001(UTF-8編碼)。

但是對於2016+版本,您可以找到以下代碼:

版本13之前的版本(SQL Server 2016(13.x))不支持代碼頁65001(UTF-8編碼)。 以13開頭的版本可以將UTF-8編碼導入到SQL Server的早期版本。

但是2014-SP2實際上將此添加到v2014中( 知識庫文章3136780 )。 因此,文檔未涵蓋此向后增強。

使用此組合而不使用-N -w可以導出UTF-8:

-c -C65001

我找到了解決方案

 +@uploadFolder + CAST(@PurchaseOrderID AS varchar(20))+'.xml' +' -T -N -w -c -C65001'

我從代碼中刪除了-w。 然后就可以了。 但是它僅適用於Microsoft SQL Server 2014(SP2-CU6)(KB4019094)-12.0.5553.0(X64)。

https://support.microsoft.com/zh-CN/help/3136780/utf-8-encoding-support-for-the-bcp-utility-and-bulk-insert-transact-sq

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM