Как вставить HTML-файл, содержащий текст на иврите, и прочитать его обратно в SQL Server 2008, используя параметр filestream? - PullRequest
0 голосов
/ 27 апреля 2010

Я новичок в опции filestream в SQL Server 2008, но я уже понимаю, как открыть эту опцию и как создать таблицу, которая позволит вам сохранять файлы. скажем, моя таблица содержит: id, name, filecontent

Я попытался вставить html-файл (в котором есть символы иврита иврита) в эту таблицу. Я пишу в asp.net (c #), используя Visual Studio 2008.

но когда я попытался прочитать содержимое, ивритский символ становится '?'.

действия, которые я предпринял, были:

1. я читаю файл так:

        // open the stream reader
        System.IO.StreamReader aFile = new StreamReader(FileName,   System.Text.UTF8Encoding.UTF8);

        // reads the file to the end
        stream = aFile.ReadToEnd();

        // closes the file
        aFile.Close();

обратный поток; // возвращает поток

  1. я вставил «поток» в столбец filecontent в виде двоичных данных.

  2. Я попытался сделать выборку для этого столбца, и данные действительно вернулись (после того, как я переместил их обратно в строку), но ивритские символы стали '?'

как мне решить эту проблему? на что стоит обратить внимание?

спасибо, gadym

Ответы [ 2 ]

2 голосов
/ 28 апреля 2010

Мне удалось решить эту проблему. Я был не прав, проблема была не в сервере sql, а в моем коде, когда я переносил его из двоичного файла в строку и наоборот.

когда вам нужно преобразовать строку (в которой есть ивритские символы) в двоичный файл, вы можете написать следующие строки:

System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
//HtmlFile = the file i read as string and now i want to convert it to bytes array.
byte[] ConvertTextToBytesArray = encoding.GetBytes(HtmlFile);

и наоборот:

    string str;
    System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding();
    // result = the binary data i want to convert it back to string
    str = enc.GetString(result);

Я почему-то использовал System.Text.ASCIIEncoding вместо System.Text.UTF8Encoding.

спасибо, Мефф!

1 голос
/ 28 апреля 2010

Похоже, кодировка UTF8 может не работать на иврите?

Смотрите здесь для более старого обсуждения: http://social.msdn.microsoft.com/Forums/en-US/csharplanguage/thread/73c81574-b434-461f-b766-fb9d0e4353c7

sr = new StreamReader(fs, Encoding.GetEncoding("windows-1255"));

Или вы уверены, что файл закодирован в формате UTF8?

Кроме того, FILESTREAM может на самом деле работать хуже, если BLOB меньше 1 МБ, и HTML-файлы, которые я ожидаю, будут соответствовать этому описанию. Вы рассматривали NVARCHAR (MAX) вместо этого.

http://blogs.msdn.com/manisblog/archive/2007/10/21/filestream-data-type-sql-server-2008.aspx

...