2010-05-19 3 views
0

Во время процесса загрузки файла я обнаружил, что незаконный символ сохраняется в таблице. zurück.pdf, C _Word.doc были именами файлов. Здесь ü, пробел между C и _Word было найдено как ? в колонке таблицы. Я проверяю имя файла на стороне клиента, заменяя не-альфа-числовые значения на _ (underscore), но все же он ускользает и сохраняется в БД. Как они могут обрабатываться на стороне клиента?Недопустимый символ в имени файла

ответ

3

Как родной немецкий спикер, я могу заверить вас, что ни «ü», ни «» являются незаконными символами.

Какая кодировка символов используется в вашей таблице данных и что вы делаете на стороне клиента, чтобы гарантировать, что все символы попадают в допустимый диапазон?

Если ваша база данных поддерживает только символы ASCII (и не может быть изменена), то вы должны использовать System.Text.ASCIIEncoding, который заменяет все символы, отличные от ASCII, на «?» для тебя.

Еще лучше, избегайте символов Юникода и представляйте их каким-либо образом, совместимым с набором символов ASCII, например, используйте '\ u9404', чтобы представить символ Unicode 9404, см. RFC5137 для некоторых методов этого и прочитайте ответы на вопросы Convert a Unicode string to an escaped ASCII string.

0

Вы можете использовать CustomValidator с вызовом System.IO.Path.GetInvalidFileNameChars() или преобразовать его результат в регулярное выражение для проверки на стороне клиента с помощью RegulaExpressionValidator.

1

Я согласен с Sebastian - проблема не в том, что это незаконные символы для имени файла, но они не являются допустимыми символами для используемой вами базы данных. Предполагая, что база данных является SQL Server, попробуйте изменить тип данных столбца на nchar, nvarchar или ntext, если в настоящий момент это один из символов char, varchar или text.