【问题标题】:how do i insert html file that have hebrew text and read it back in sql server 2008 using the filestream option?如何插入具有希伯来语文本的 html 文件并使用 filestream 选项在 sql server 2008 中读回它?
【发布时间】:2010-04-27 09:04:52
【问题描述】:

我是 sql server 2008 中文件流选项的新手, 但我已经了解如何打开此选项以及如何创建允许您保存文件的表。 假设我的表包含: id、名称、文件内容

我尝试在此表中插入一个 html 文件(其中包含希伯来语字符/文本)。 我正在使用 Visual Studio 2008 在 asp.net (c#) 中编写。

但是当我尝试回读内容时,希伯来语字符变为“?”。

我采取的行动是:

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. 我将“流”作为二进制数据插入到文件内容列中。

  2. 我尝试对此列进行“选择”,并且数据确实返回(在我将其转换回字符串之后),但希伯来语字符变为“?”

我该如何解决这个问题? 我应该注意什么?

谢谢, 加迪姆

【问题讨论】:

    标签: asp.net sql-server-2008 filestream hebrew


    【解决方案1】:

    我成功地解决了这个问题。 我错了,问题不在 sql server 中,而是在我的代码中,当我将它从二进制传输到字符串时,反之亦然。

    当您需要将字符串(具有希伯来字符)转换为二进制时,您可以编写以下行:

    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。

    谢谢梅夫!

    【讨论】:

      【解决方案2】:

      看起来 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 编码的吗?

      此外,如果 BLOB 小于 1MB,FILESTREAM 的实际性能可能会更差,而我希望 HTML 文件符合该描述。您是否考虑过 NVARCHAR(MAX)。

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

      【讨论】:

      • 感谢您的回答。我必须将这些 html 文件保存为我的数据库中的文件,而不是字符串或类似的东西。没错,文件大小小于 1MB,甚至接近 2K,但我必须将其保存为文件。 “文件内容”列的类型是 varbinary(MAX)。我可以将它更改为 NVARCHAR(MAX) 并且它仍然会像文件一样运行吗?
      • @gadym,如果您必须将文件保存为 FILESTREAM,那么它们必须是 VARBINARY(MAX)。现在 VARBINARY 不知道也不关心文本编码,所以问题出在你的编码方法上 - 检查 HTML 文件的编码,并尝试我上面提到的不同编码:)
      • 再次感谢。但不幸的是,当我改变了你提到的编码时,希伯来语变成了胡言乱语:)。我也尝试在文件中添加元标记,如下所示: 但只有当我使用 utf8 时才可以。但正如我之前所说,当我尝试“选择”二进制数据并将其传输回字符串时希伯来语字符变为'???'。我有一个想法-也许我需要更改表/数据库的排序规则? (我不知道该怎么做,所以我还没有尝试过)它是否相关?希望你能/仍然有精力帮助我。:-|
      • @gadym,数据库排序规则对于 VARBINARY 来说应该无关紧要。在输入的过程中检查输入,在从流中读入之后但在存储之前看起来是否正常?您如何从列中检索数据?
      猜你喜欢
      • 1970-01-01
      • 2013-12-16
      • 1970-01-01
      • 1970-01-01
      • 2011-01-30
      • 2011-08-21
      • 1970-01-01
      • 1970-01-01
      • 2021-12-29
      相关资源
      最近更新 更多