【问题标题】:Convert string stored as binary back to string将存储为二进制的字符串转换回字符串
【发布时间】:2015-01-20 21:53:34
【问题描述】:

我已将字符串作为二进制数据存储在数据库中。
我将此数据作为字节 [] 加载到 c# 中。如何将其转换为原始字符串?

declare @QRCodeLink nvarchar(max) = 'goo.gl/JCKW'
declare @QRCodeData varbinary(max) = CONVERT(varbinary(max), @QRCodeLink)
UPDATE dbo.QRCode
SET QRCodeData = @QRCodeData
WHERE ID = @ID

在 C# 代码中, Convert.ToString(qrCodeData) 导致此 "System.Byte[]"

【问题讨论】:

    标签: c# sql-server string binary-data type-conversion


    【解决方案1】:

    nvarchar 值被转换为每个字符为两个字节的二进制值。

    当你从数据库中读取它时,你已经可以转换它了:

    select convert(nvarchar(max), QRCodeData) from dbo.QRCode ...
    

    或者你可以使用UTF-16编码来转换C#中的数据:

    string qrCodeLink = Encoding.Unicode.GetString(qrCodeData);
    

    【讨论】:

      【解决方案2】:

      使用 Encoding.GetString()

      byte[] byteArr = Encoding.UTF8.GetBytes("hello");
      string s = Encoding.UTF8.GetString(byteArr);
      Console.WriteLine(s);
      

      【讨论】:

      • 我正在从 db 获取字节 []。 Encoding.UTF8.GetString 在每个字符之间给我一个带有\0 的字符串。
      【解决方案3】:

      这取决于字符串编码,但假设您使用的是 ASCII

      string decoded = ASCIIEncoding.ASCII.GetString(byteArray);
      

      其中 byteArray 是您来自 sqlserver 的数据

      如果返回垃圾,请尝试 UTF8 或其他编码

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-02
        • 2021-05-09
        • 1970-01-01
        • 2019-08-23
        • 1970-01-01
        • 1970-01-01
        • 2014-06-14
        相关资源
        最近更新 更多