将Unicode转换为双字节

时间:2014-12-23 19:36:12

标签: c# unicode

我有一个类型为Image的列的sqlserver表我正在使用此代码从我的数据库中恢复它。

public static byte[] ObtenerArchivo(string IdArchivo,bool GuardarEnDisco)
{
    byte[] archivo = null;
    MyContext db = new MyContext();
    Double Versiond = 1010;

    archivo = db.Versiones.Where(x => x.IntIdArchivo == IdArchivo && x.IntIdVersion == Versiond).Select(x => x.BinFisico).First();
    return archivo;
}

现在要使mi文件可读,我需要转换它。此应用程序继承自Visual FoxPro,从我的数据库中检索文件后必须使用此函数转换它

**VFP Sintax 
STRCONV(lcImage, 6)

In VFP help it says: 

Converts character expressions between single-byte, double-byte, UNICODE, and locale-specific representations.

6 表示:

6   Converts UNICODE (wide characters) to double-byte characters.

现在我的问题是如何在c#中进行相同的转换?

编辑1:如果我不能像@Hans Passant那样说话。并且知道我已经在该SQL Image字段上存储了文本文件,图像,base 64编码文件。如何存储,检索和更新这些文件以使用C#进行管理?

1 个答案:

答案 0 :(得分:0)

@HansPassant关于他的apreciation是好的,但在我的情况下采取一些特殊条件是可以将字符串从doublé字节转换为单字节。

1- VFP将文本文件翻译为双字节,这意味着我的原始文件是仅文本单字节格式化。

2-要解码我的文件,只需删除由vfp添加的字节。

以下是代码:

public async Task<string> GetStringAsync(string IdArchivo)
{
    string FinalData = await Task.Factory.StartNew(() =>
        {
            string NData = string.Empty;
            Byte[] BData = GetBinaryData(IdArchivo);
            string SData = Encoding.UTF8.GetString(BData);
            for (int i = 0; i < SData.Length; i++)
            {
                if (i > 0)
                    i++;

                if (i <= SData.Length - 1)
                    NData += SData[i];
            }
            return NData;
        });
    return FinalData;
}

public Byte[] GetBinaryData()
{

    // Just retrieve the file from my database 
}

此过程删除数组中的所有奇数字节,并按预期返回我的字符串。是的,它不是那么快,但至少解决了我的问题。