C# 从字符串中删除字符十六进制代码
我有一个名为folderć的文件夹,其中包含smth.jpg。由于文件夹名称中包含字母ć,因此文件路径将作为文件夹%C0%01%/smth.jpg保存在数据库中。 字母ć保存为十六进制代码。在网站上预览图像时,这不是问题 当我试图通过C函数在Folderć中创建子文件夹时,会出现问题。函数获取文件路径字符串,查找文件夹名称并在其中创建子文件夹。因为我的字符串包含十六进制代码而不是字母ć,所以函数无法找到该路径,因此无法创建子文件夹 该字符串为UTF-8格式,因此更改编码不会改变任何内容。C# 从字符串中删除字符十六进制代码,c#,sql,asp.net,character-encoding,C#,Sql,Asp.net,Character Encoding,我有一个名为folderć的文件夹,其中包含smth.jpg。由于文件夹名称中包含字母ć,因此文件路径将作为文件夹%C0%01%/smth.jpg保存在数据库中。 字母ć保存为十六进制代码。在网站上预览图像时,这不是问题 当我试图通过C函数在Folderć中创建子文件夹时,会出现问题。函数获取文件路径字符串,查找文件夹名称并在其中创建子文件夹。因为我的字符串包含十六进制代码而不是字母ć,所以函数无法找到该路径,因此无法创建子文件夹 该字符串为UTF-8格式,因此更改编码不会改变任何内容。 有人知
有人知道问题出在哪里以及如何解决吗?您可以使用Base64对名称进行编码:
public string ToBase64String(string text)
{
byte[] data = Encoding.UTF8.GetBytes(text);
return Convert.ToBase64String(data);
}
并使用它string myEncFolderPath=ToBase64StringmyFolderPath;在数据库中保存字符串之前
从数据库接收字符串后,可以使用以下命令将其解码回正常字符串:
public string FromBase64String(string base64)
{
byte[] data = Convert.FromBase64String(base64);
return Encoding.UTF8.GetString(data);
}
通过使用字符串myFolderPath=FromBase64StringmyEncFolderPath
这样,您可以在数据库中自由保存字符串。您可以使用Base64对名称进行编码:
public string ToBase64String(string text)
{
byte[] data = Encoding.UTF8.GetBytes(text);
return Convert.ToBase64String(data);
}
并使用它string myEncFolderPath=ToBase64StringmyFolderPath;在数据库中保存字符串之前
从数据库接收字符串后,可以使用以下命令将其解码回正常字符串:
public string FromBase64String(string base64)
{
byte[] data = Convert.FromBase64String(base64);
return Encoding.UTF8.GetString(data);
}
通过使用字符串myFolderPath=FromBase64StringmyEncFolderPath
这样,您就可以在数据库中自由保存字符串。文件路径作为文件夹%C0%01%/smth.jpg保存在数据库中。这就是您在SQL Server management studio中运行select时看到的内容吗?您在数据库中使用的列类型是什么?您应该能够使用nvarchar来允许使用Unicode字符,然后不需要进行这种类型的编码。它在sql查询后带有十六进制符号。这看起来像一个URL编码。您如何从数据库中读取该值?在您尝试创建该文件夹之前,该值采用什么路径?这是正确的。使用HttpUtility.UrlEncode方法节省了一天。谢谢FilePath作为文件夹%C0%01%/smth.jpg保存在数据库中这是在SQL Server management studio中运行select时看到的吗?数据库中的列使用什么类型?您应该能够使用nvarchar来允许使用Unicode字符,然后不需要进行这种类型的编码。它在sql查询后带有十六进制符号。这看起来像一个URL编码。您如何从数据库中读取该值?在您尝试创建该文件夹之前,该值采用什么路径?这是正确的。使用HttpUtility.UrlEncode方法节省了一天。谢谢当专栏为nvarchar时,您不需要这样做。显然它保存正确。当列为nvarchar时,您不需要这样做。显然,它确实正确地保存了数据。