C# 允许简体中文输入
我工作的公司正在投标一个项目,该项目要求我们的电子商务解决方案接受简体中文输入。在做了一些研究之后,ASP.net似乎使全球化配置变得简单:C# 允许简体中文输入,c#,asp.net,sql-server-2005,globalization,cjk,C#,Asp.net,Sql Server 2005,Globalization,Cjk,我工作的公司正在投标一个项目,该项目要求我们的电子商务解决方案接受简体中文输入。在做了一些研究之后,ASP.net似乎使全球化配置变得简单: <configuration> <system.web> <globalization fileEncoding="utf-8" requestEncoding="utf-8" responseEncoding="utf-8" culture="zh-Hans"
<configuration>
<system.web>
<globalization
fileEncoding="utf-8"
requestEncoding="utf-8"
responseEncoding="utf-8"
culture="zh-Hans"
uiCulture="en-us" />
</system.web>
</configuration>
问题:
公元1年。真正的问题是,你希望国际化走多远。因为i18n不仅允许Unicode输入。您至少需要支持本地日期、时间和数字格式、本地排序(主要与排序相关),并确保您的应用程序在本地化操作系统上正确运行(除非您正在开发云托管解决方案)。你可能想读更多关于这个话题的文章 至于对汉字输入的支持,如果你打算在中国提供软件,你至少需要支持。要做到这一点,您需要使用适当的.Net Framework版本—支持Unicode 3.0的版本。我相信它从.Net Framework 2.0开始就得到了支持。
但是,如果您想更进一步(这可能是获得竞争优势所必需的),您可能需要支持GB18030-2005。唯一的问题是,在这个过程中,对这些字符(CJK统一表意文字扩展B)的完全支持发生在后来(我不确定它是Unicode 6.0还是Unicode 6.1)。因此,您可能被迫使用最新的.Net Framework,但仍然无法确定它是否涵盖所有内容。
你可能想读书 公元2年。我强烈建议您不要使用带有中文字符的SQLServer2005。原因是,旧的SQL Server引擎只支持UCS-2而不支持UTF-16。这似乎是一个细微的差别,但这确实给4字节汉字带来了问题。实际上,您希望能够在查询中使用它们(即LIKE或WHERE子句)——您将收到所有记录。这就是它的工作原理。要支持它们,您需要设置非常具体的中文排序规则,这将破坏对其他语言的支持。
基本上,将SQL Server 2005与中文表意文字一起使用是一个不好的想法。首先,我想知道您是否确定您使用
zh Hans
选择了正确的文化标识符,这是一个错误。如果您的目标市场是某一特定文化,例如zh CN
(中文在中国使用),那么您可能更适合针对该文化
其次,如果计划专门针对此区域性的部署,则使用web.config文件设置区域性是可以的。通常,您需要一个相同的部署来动态地适应最终用户的区域性,在这种情况下,您可以基于URL方案等编程方式设置Thread.CurrentCulture
(甚至Thread.CurrentUICulture
(如果您提供的是本地化资源)(例如,www.myapp.com将使用en-US,www.myapp.com/china将使用zh-CN)或accept-languages标题或应用程序内语言选择器
除了PayWe引用的Unicode限制之外(这意味着您可能需要使用最新.NETFramework/SQL Server),对于简化的中文来说,没有任何具体的事情需要做。如果遵循标准,则应该全部设置。也许您应该考虑本地化(翻译)。顺便说一句,作为其中的一部分,你的应用程序将被翻译成中文
关于SQL Server,Paweł的观点似乎非常清楚。也就是说,只要使用nvarchar数据类型(Unicode)您不需要在数据库端对这些列运行查询或根据这些列对它们进行排序,如果您在SQL Server 2005上遇到任何问题,我会感到惊讶。因此,这实际上取决于您如何处理这些数据。我相信您必须将数据库模式中的字段类型从char、varchar和text更改为nchar、nvarchar和ntext,以支持unicode字符。我对ASP.NET部分不太清楚。为什么不使用开源电子商务平台,而从头开始这样做呢:Codeplex:当然,你指的是zh CN,不是中文瑞士:)为什么zh Hans(中文,简体中文)和zh Hant(中文,繁体中文)这些书写系统是否在多个国家或地区使用(中国和新加坡使用zh-Hans,而台湾、香港和澳门使用zh-Hant)。根据您的建议,您需要使用其中一种特定文化(zh CN、zh SG、zh TW、zh MO或zh HK)作为当前UICulture,这显然是没有意义的(创建zh Hans和zh Hant的目的就是为了避免这种情况)。您应该仅对CurrentCulture使用特定文化。:)+1对中国瑞士!也就是说,在最初的post中,zh是为区域性属性(Thread.CurrentCulture)指定的,而不是UICulture,并且在这种情况下使用中性区域性不是一个好主意(如果尝试访问RegionInfo,会出现异常,而默认值可能不合适)。不同地区的文化之间存在差异,试图隐藏在一种中立的文化背后,假装这些差异不存在,比实际选择一种(或多种)并知道自己的目标更糟糕。