代码之家  ›  专栏  ›  技术社区  ›  eKek0

如何正确处理.net中的数据?

  •  0
  • eKek0  · 技术社区  · 14 年前

    我在C Winforms中使用的是DataGridView,数据来自Sybase数据库,字符显示不正确。这就是我看到的:

    my datagridview http://i42.tinypic.com/10ifjwo.jpg

    你知道我该怎么解决吗?

    4 回复  |  直到 9 年前
        1
  •  3
  •   Hans Passant    14 年前

    这不是它的工作原理,cultureinfo有不同的用途。你需要编码类。你会得到一个:

      var enc = Encoding.GetEncoding(850);
    

    然后使用enc.getstring()转换文本。

    退一步,这个编码是 真正地 在软件工程领域,25岁是很长的一段时间。你真的应该考虑升级这个数据库。此外,编码应该由sybase数据库提供商处理。它应该已经将文本列转换为Unicode。如果文本以某种方式包含在blob中,您应该只需要转换自己。

        2
  •  2
  •   AdamH    14 年前

    我经常遇到这样的问题:将sybase数据库中的数据获取到windows中。您将数据存储为cp850(这很好),sybase可以以您希望的任何字符集将其返回给您,但是在返回数据之前,由客户端告诉服务器它需要什么字符集,服务器将为您转换它。

    但是默认情况下,a do.net、oledb或odbc连接不指定客户端字符集。Sybase不会应用任何转换,并且Windows(或您的应用程序)假设数据在其首选字符集中。

    修复方法是在连接时指定字符集。为我工作的那个是“iso_1”。(您也可以找到win1252作为替代,但我没有测试过它)

    因此,如果您使用的是ODBC或OLEDB,那么打开连接管理器,转到第二页或第三页,在字符集框中输入“iso_1”。您也可以在连接字符串中指定它,但我记不清确切的语法可能是“charset=iso_1”。

    如果您使用的是ado.net,我相信您也可以这样做,但我仍然不确定确切的语法。

        3
  •  1
  •   Daniel Dolz    14 年前

    是否使用连接字符串连接?尝试添加到连接字符串:

    ;当前语言=西班牙语

        4
  •  0
  •   eKek0    9 年前

    最后,我找到了解决办法 in a post .

    必须在连接字符串中添加以下参数:

    keeporgmultibyte=1;