Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从Sybase填充WinForms时,某些字符未正确显示_C#_.net_Localization_Sybase - Fatal编程技术网

C# 从Sybase填充WinForms时,某些字符未正确显示

C# 从Sybase填充WinForms时,某些字符未正确显示,c#,.net,localization,sybase,C#,.net,Localization,Sybase,我在C#WinForms中使用的是datagridview,数据来自Sybase数据库,字符显示不正确。这就是我所看到的: 你知道我该怎么解决这个问题吗 这不是它的工作原理,CultureInfo有不同的用途。您需要编码类。您将获得一个具有以下功能的: var enc = Encoding.GetEncoding(850); 然后可以使用enc.GetString()转换文本 退一步说,这种编码确实很古老,25年在软件工程中是很长的一段时间。你真的应该考虑升级这个dBASE。此外,编码

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


你知道我该怎么解决这个问题吗

这不是它的工作原理,CultureInfo有不同的用途。您需要编码类。您将获得一个具有以下功能的:

  var enc = Encoding.GetEncoding(850);
然后可以使用enc.GetString()转换文本


退一步说,这种编码确实很古老,25年在软件工程中是很长的一段时间。你真的应该考虑升级这个dBASE。此外,编码应该由Sybase数据库提供商处理。它应该已经将文本列转换为Unicode。只有当文本以某种方式包含在blob中时,您才需要转换自己。

这不是它的工作方式,CultureInfo有不同的用途。您需要编码类。您将获得一个具有以下功能的:

  var enc = Encoding.GetEncoding(850);
然后可以使用enc.GetString()转换文本


退一步说,这种编码确实很古老,25年在软件工程中是很长的一段时间。你真的应该考虑升级这个dBASE。此外,编码应该由Sybase数据库提供商处理。它应该已经将文本列转换为Unicode。只有当文本以某种方式包含在blob中时,才需要转换自己。

是否使用连接字符串进行连接?尝试向连接字符串中添加:


);当前语言=西班牙语

是否使用连接字符串进行连接?尝试向连接字符串中添加:


);Current Language=Spanish

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

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

修复方法是在连接时指定一个字符集。为我工作的是“iso_1”。(您也可以选择WIN1252,但我还没有测试过它)

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


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

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

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

修复方法是在连接时指定一个字符集。为我工作的是“iso_1”。(您也可以选择WIN1252,但我还没有测试过它)

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


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

最后,我找到了一个解决方案

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

KeepOrgMultibyte=1


最后,我找到了一个解决办法

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

KeepOrgMultibyte=1


我的公司不能也不会退后一步,因为政治决定。事实上,对于不使用英语的人来说,这种事情很常见,与你的25岁无关。我们总是在ñ、ñ、月前一天等方面遇到问题,这就是为什么每个人都应该在文本列中使用Unicode,在日期列中使用datetime。我的公司不能也不会后退一步,因为政治决定。实际上,对于不使用英语的人,这类事情很常见,与你的25岁无关。我们总是在ñ、ñ、月前一天等方面遇到问题,这就是为什么每个人都应该在文本列中使用Unicode,在日期列中使用datetime。建议阅读:“每个软件开发人员绝对、积极地必须了解Unicode和字符集的绝对最低要求”建议阅读:“绝对最低要求每个软件开发人员绝对、肯定地必须了解Unicode和字符集”