C# 从Sybase填充WinForms时,某些字符未正确显示
我在C#WinForms中使用的是datagridview,数据来自Sybase数据库,字符显示不正确。这就是我所看到的: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。此外,编码
你知道我该怎么解决这个问题吗 这不是它的工作原理,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和字符集”