UCS只是规定如何编码,并没有规定如何传输、保存这个编码。
把UTF-8编码转换为GB2312编码2005年5月19日 10:44最近在做的广告系统中,碰到了一个问题,广告系统采用的UTF-8编码,而一些使用这套广告系统的频道页面使用的是GB2312编码。当然也有使用UTF-8编码的频道使用这套广告系统。 频道页面是通过嵌入类似如下的代码方式,来调用广告的。具体那个时间显示那个广告,或者那些广告组合是广告系统自己处理的。
以上只是修改整体的默认编码,如果只有某个页的编码需要修改,ASP.net 中则可以简单的使用下面代码:
在非ASP.net 应用中,可能你读到的数据是UTF-8编码,但是你要转换为GB2312编码,则可以参考以下代码:
当然,其他各种编码之间的转换,跟上述代码也类似的,就不描述了。
有一个Web项目,Web.Config中requestEncoding和responseEncoding都是gb2312,而从数据库中取出的简介数据可能是中文和韩、日文混合的内容,这时候如果直接输出到页面上,其页面会出现乱码,其中的韩文内容无法正确显示。当然如果项目的编码都使用Utf-8的话将没有这个问题,但这个项目是一个老项目,为了尽量不要影响已有的程序,所以无法将编码改为Utf-8,只能在本页面上动脑筋。 经过研究,发现这个问题可以通过Html实体的方法解决。 对于Html实体请参考: Character entity references in HTML 4 测试代码: Byte[] bComments = Encoding.UTF8.GetBytes("一ンブル????中文"); 这段代码的作用是将所有的中文、韩文、日文字符通过硬编码输出成为html实体。而Html实体是不受ResponseEncoding和页面编码集影响的。 说明: \u0800 以上的为中、韩、日字符。 中文的范围:\u4e00 - \u9fa5,日文在\u0800 - \u4e00,韩文为\u9fa5以上。 这个方法仅仅是为了解决小范围问题,如果各位有更好的办法请指教。
ms的Best Practices Analyzer Tool for Microsoft SQL Server 2000 1.0上个月发布了1.0版本,和beta版相比,看起来没有什么太大的变化。Best Practices Analyzer Tool for Microsoft SQL Server 2000检查的一些rules可以做为t-sql编程的checklist sql server数据库编程指导以及最佳实践 原则 编写高可读的代码:遵循命名原则和代码风格约定 ------------------------------------------------------------------------------ 命名数据库对象时,采用统一的前缀或者后缀 采用统一的前缀或者后缀是为了提高代码的可读性,但是
存储过程或者函数,视图前应该注释创建者, 创建时间,修改者,修改时间,功能注释,使用说明,同时包含一到多条执行该对象的语句 及时检查执行状况 默认情况下,如果一条sql语句执行错误,sql server不会自动roll back前面的执行(可以设置:SET XACT_ABORT ON),sql语句执行完毕后,需要及时通过全局变量@@error和@@rowcount来检查执行状况。 用标准的join方式 标准的join方式是指while语句中只包含过滤条件,不包含join条件 尽量避免客户端程序直接通过select,insert,update等直接操作数据库 用存储过程封装数据访问,存储过程是经过编译的,不用每次计算execute plan。而且封装了逻辑,同时增加了安全性。 存储过程如果需要返回数据,使用output关键字 不要用return返回数据,存储过程的return应该返回存储过程的执行状况,如果需要返回数据,使用带有output关键字的参数 谨慎使用IDENTITY作为表的主键的数据类型 IDENTITY会给客户端程序和database交互带来很多影响,而且在数据导入导出时也会带来麻烦,需要仔细评估这些影响。但是IDENTITY和guid相比也有优点,就是可读性。 如果没有特别设置,null参与的运算结果都为null,如果疏忽这一原则,会对程序逻辑的正确性带来影响,而且,客户端程序需要额外的步骤来处理NULL。需要设置ANSI_NULLS为ON。 在insert语句中,使用确定的列名 insert语句中,使用确定的列名以间少表结构变化对t-sql代码带来的影响 尽量使用外键,约束检查来保证数据的完整性 数据完整性至关重要,外键,约束检查可以避免另外写代码来保证数据完整性 查询结果中冗余的信息影响整体的性能 尽量避免使用服务器端游标 服务器端游标对性能有严重的影响,应当尽量避免,比如可以用while循环来代替游标,如果不能避免,则应选择最合适的游标类型 尽量避免使用临时表 临时表会发生磁盘IO操作,影响性能,可以用嵌套查询,view,或者table变量来代替临时表。如果需要缓存大量的数据,临时表优于table变量,同时注意为临时表建index 如果需要执行一系列sql命令,在前面添加SET NOCOUNT ON 执行SET NOCOUNT ON,sql命令执行影响的行数不会传回客户端,减少网络流量,提高性能 在字符串匹配查询时,避免在第一个字符位置使用通配符 如果第一个字符位置使用通配符,则index不起作用 使用IN 或者NOT IN,则index不起作用 事务处理时,尽可能的占用最少的资源以减少资源的锁定,提高数据库整体性能。同时检查加锁类型,尽量使用低级别的加锁类型。 匹配的事务处理 如果存储过程开始了事务处理,应该负责结束这个事物处理,submit或者rollback 操作NCHAR或者NVARCHAR数据类型的列时,使用N关键字 使用N关键字,sql server会使用unicode编码,避免出现乱码 尽量避免使用TEXT,NTEXT,binary,image数据类型的字段,尽量避免将文件或者图片直接存入数据库 尽量使用VARCHAR代替CHAR,用NVARCHAR代替VARCHAR, 用VARCHAR代替CHAR是为了节省数据库空间,NVARCHAR代替VARCHAR是为了避免unicode带来的麻烦 如果某个table中的数据对不同用户的可见性是不一样的,使用view来隔离用户对table的直接访问 检查sql注入式攻击对代码的影响。 |
|