Pol*_*ard 10 c# asp.net unicode
我正在设计一个新的CMS,但想设计它以满足我未来的所有需求,如多语言内容,所以我认为Unicode(UTF-8)是最好的解决方案
但通过一些搜索,我得到了这篇文章
http://msdn.microsoft.com/en-us/library/bb330962%28SQL.90%29.aspx#intlftrql2005_topic2
所以我现在很困惑现在使用UTF-8/UTF-16/UTF-32/UCS-2
这对于多语言内容和性能等更好.
PS:我使用的是Asp.net和c#以及SqlServer 2005
提前致谢
dan*_*n04 26
所以我现在很困惑现在使用UTF-8/UTF-16/UTF-32/UCS-2
这对于多语言内容和性能等更好.
UCS-2已过时:它不再代表每个Unicode字符.UTF-8,UTF-16和UTF-32都可以.但为什么有三种不同的方法来编码相同的字符?
因为在过去,程序员对字符串做了两个很大的假设.
多语言文本(或者甚至是单语文本,如果该语言恰好是中文,日文或韩文)的问题在于这两个假设的组合限制为256个字符.如果您需要表示更多,则需要删除其中一个假设.
保持假设#1和丢弃假设#2可以得到可变宽度(或多字节)编码.今天,最流行的可变宽度编码是UTF-8.
丢弃假设#1并保持假设#2为您提供宽字符编码.Unicode和UCS-2最初设计为使用16位固定宽度编码,允许65,536个字符.Unicode的早期采用者,例如Sun(用于Java)和Microsoft(用于NT)使用UCS-2.
然而,几年后,人们意识到即使这对每个人来说还不够,所以扩展了Unicode代码范围.现在,如果您需要固定宽度编码,则必须使用UTF-32.
但是,Sun和微软曾写过根据各地的16位字符庞大的API,并热情不高,他们改写为32位.幸运的是,仍有2048未分配字符出原始65536字符"基本多语种平面",它可以被指定为"替代物",在对要被用于表示辅助字符的块:所述UTF-16编码的形式.不幸的是,UTF-16满足既不原来的两个假设:这既是非8位和可变宽度.
综上所述:
使用UTF-8时的8位编码单元的假设是非常重要的.
这适用于:
'\x00字符串中的字节,因此不能使用UTF-16或UTF-32.事实上,UTF-8最初是为基于Unix的操作系统而设计的(Plan 9).假设固定宽度编码很重要时,请使用UTF-32.
当你所关心的性质,这是有用的字符,而不是它们的编码,诸如Unicode的等同物的ctypes.h类似功能isalpha,isdigit,toupper等.
当假设不重要,但您的平台曾经使用过UCS-2时,请使用UTF-16.
您是在为Windows编写,还是为其设计的.NET框架?对于Java?那么UTF-16是你的默认字符串类型; 不妨用它.
由于您使用的是C#,因此所有字符串都将以UTF-16编码.ASP.NET将以UTF-8编码实际的HTML页面,但这是在幕后完成的,您无需关心.
三种UTF编码形式需要不同的内存量来表示一个字符:
因此,如果您想节省空间,如果您的角色大多是ASCII,则使用UTF-8;如果您的角色主要是亚洲人,则使用UTF-16.
Jon*_*nna 13
这不是问题,因为你说:
我正在使用Asp.net和c#以及SqlServer 2005
SqlServer在一些以XML为中心的地方使用UTF-16(ntext,nvarchar,nchar)和UTF-8,而不会做任何奇怪的事情.
C#在其所有字符串中使用UTF-16,在处理将我们带入的流和文件时使用工具进行编码......
ASP.NET默认使用UTF-8,很难想象它不是一个好的选择(即使使用亚洲语言,这些语言的文本简洁结合了具有特殊含义的名称和符号的事实)在HTML,CSS,javascript,大多数XML应用程序和你将要发送的其他流中,从U + 0000到U + 007F的范围,使得UTF-16优于UTF-8的优势明显低于纯文本亚洲语言).
SqlServer的UTF-16和C#以及ASP.NET在读写时所做的UTF-8之间的谈话是使用默认设置为您完成的,但由于这是您可以随时更改的一位,因此我的答案将使用UTF-8.真的,你会使用-8和-16的混合物,但你不会注意到大部分时间(你注意到你已经这样做了).
如果仅仅因为许多过时的示例将人类消费的文本放在varchar,text或char字段中,那么SQL Server就不那么容易了.纯粹用于代码(例如,所有ISO国家代码都在char(2)的范围内,因此nchar(2)只会浪费空间),只有nvarchar,ntext和nchar用于人而不是机器才能读写.