将 Unicode 转换为双字节

本文关键字:字节 转换 Unicode | 更新日期: 2023-09-27 18:35:05

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

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图像字段上存储了文本文件,图像,基础64编码文件。如何存储、检索和更新这些文件以使用 C# 进行管理?

将 Unicode 转换为双字节

@HansPassant 对他的赞赏是可以的,但在我的情况下采取一些特殊条件可以将字符串从双字节转换为单字节。

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 
}

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