【问题标题】:ASP.NET/SQLServer - save filesnames with special characters converts the saved filename...why?ASP.NET/SQLServer - 使用特殊字符保存文件名会​​转换保存的文件名......为什么?
【发布时间】:2011-11-09 14:02:09
【问题描述】:

我有一个奇怪的问题。我有一个存储文件的 ASP.NET 应用程序。我有一个表 (SQL 2008 R2),我在其中存储用户上传的文件的文件信息。

有时,当我使用特殊字符存储来自国际用户的文件名时,该名称在存储在数据库表中时会被转换: 原始文件名示例:Łinename.mov 存储文件名:Linename.mov

当我检索文件名以构建路径/文件字符串时,名称不匹配并且找不到我的文件。

该表将文件名存储为 nvarchar,我认为这将允许 unicode 字符。

有什么想法吗?我宁愿存储原始文件名,而不是在服务器上重命名文件。

编辑: 我认为问题在于有问题的字符不在 UTF-8 字符集中。 我通过保持简单的生活来解决这个问题:我支持 UTF-8,如果文件在存储为 UTF-8 时被转换,那就是我的服务器文件名。

【问题讨论】:

  • 什么是表架构?听起来像是编码问题?

标签: sql-server utf-8 sql-server-2008-r2 utf


【解决方案1】:

NVARCHAR 确实允许 Unicode,但您没有说的是如何插入到数据库中——翻译完全有可能不是在 SQL Server 上发生,而是在 ASP.NET 应用程序中发生。

对数据库运行 SQL Profiler 并尝试使用非 ASCII 字符存储文件,并查看实际对数据库执行的操作。如果 Profiler 显示翻译后的名称,则问题出在 ASP.NET 中。否则 SQL Server 会做一些奇怪的事情。

选中此项,然后编辑您的问题以报告结果。

【讨论】:

  • 谢谢。也许我的问题不是最好的,但我只是有一个需要解决的问题。我按照你的建议做了(我的商店来自 ASP.NET -> WCF -> ado.net -> MSSQL),它是从步骤 1 转换的。我认为有问题的字符不在 UTF-8 字符列表中.我的解决方案是使用 UTF-8 存储,并将服务器上的文件名调整为与数据库中的文件名相同。
  • 该字符将在 UTF-8 字符集中(每个字符都在 UTF-8 字符集中),所以并不是丢失了它。字节是如何从网络进来的?应该可以追踪翻译的下落。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多