从字符串中删除char十六进制代码

时间:2016-04-13 16:33:22

标签: c# sql asp.net character-encoding

我有一个名为Folderć的文件夹,其中包含smth.jpg。由于文件夹名称中包含字母ć,因此文件路径将作为Folder%C0%01%/smth.jpg保存在数据库中。 字母ć保存为十六进制代码。在网站上预览图像时,这不是问题。

当我尝试通过C#函数在Folderć中创建子文件夹时出现问题。函数获取文件路径字符串,查找文件夹名称并在其中创建子文件夹。因为我的字符串包含十六进制代码而不是字母ć函数无法找到该路径因此无法创建子文件夹。

该字符串采用UTF-8格式,因此更改编码不会改变任何内容。 任何人都知道问题在哪里以及如何解决?

1 个答案:

答案 0 :(得分:0)

您可以使用Base64编码名称:

public string ToBase64String(string text)
{
    byte[] data = Encoding.UTF8.GetBytes(text);
    return Convert.ToBase64String(data);
}

并在将字符串保存到数据库之前使用string myEncFolderPath = ToBase64String(myFolderPath);

从DB收到字符串后,您可以使用以下命令将其解码回正常字符串:

public string FromBase64String(string base64)
{
    byte[] data = Convert.FromBase64String(base64);
    return Encoding.UTF8.GetString(data);
}

使用string myFolderPath = FromBase64String(myEncFolderPath);

这样,您就可以在数据库中自由保存字符串。