几个小语种的乱码问题

1. 数据库存储

用SQL server 2005的时候,首先当然要选择好正确的collation. 比如,泰语-thailand_CS_AI, 越南语-Vietnamese_CS_AI. 对泰语来见使用过程中字符型的列data type可以像英文一样选用varchar,没有任何问题。但对越南语如果对于字符型数据也同样选择varchar类型,存储之后就是部分乱码。如果你选用nvarchar(max),那么这个问题就解决了。

 

2. 在用ENCTYPE="multipart/form-data“ 表单上传附件的时候,javazoom的UploadBean.jar是一个很好的选择,MultipartFormDataRequest这个类就实现了一个"multipart/forma-data" Http请求解析器. 但在获取除文件以外的input 数据时,如果不做好正确的设置,的到的就是乱码。对于英文来见使用

mrequest = new MultipartFormDataRequest(context.getRequest());

value= mrequest.getParameter("name");

就可以得到所需要的值。但在我做一个需要获取泰语的表单请求的时候,得到的就全是乱码,网上查找了大量资料,编码设定之类的也试了不少,都快将近要放弃了。结果只是把上面那个mrequest的定义稍作调整就可以了

mrequest = new MultipartFormDataRequest(context.getRequest(),null,100*1024*1024,MultipartFormDataRequest.COSPARSER,"UTF-8");

不过我查看了API, by default 解析器就是cos,编码类型应该也是UTF-8吧,不过看了看MultipartFormDataRequest.class真需要自己设定一下。不管了,这样没有问题就ok,有时间再仔细研究。

 

附文:

一、varchar[(n)] 和nvarchar(n)

1.varchar[(n)]

长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。所输入的数据字符长度可以为零。varchar 在 SQL-92 中的同义词为 char varying 或 character varying。

2.nvarchar(n)

包含 n 个字符的可变长度 Unicode 字符数据。n 的值必须介于 1 与 4,000 之间。字节的存储大小是所输入字符个数的两倍。所输入的数据字符长度可以为零。nvarchar 在 SQL-92 中的同义词为 national char varying 和 national character varying。

3.Unicode编码

Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。1990年开始研发,1994年正式公布。随着计算机工作能力的增强,Unicode也在面世以来的十多年里得到普及.

对于英文来说,ascii码0-127就足以代码所有字符,对于中文而言,则必须使用两个字节(byte) 来代表一个字符,具第一个字节必须大于127(所以我们有许程序判断中文都是以ascii码大于127作为条件)
以上用两个字节来表示一个中文的方式,在习惯上称为双字节(即DBCS:Double-ByteCharacterSet),而相对之下,英文的字符码就称为单字节SBCS(Single-ByteCharacterSet)。
虽然双字节(DBCS)足以解决中英文字符混合使用情况,但对于不同字符系统而言,必须经过字符码转换,非常麻烦。例如:中英文混合情况,日文,韩文等等。 为解决这个问题,Apple,Xerox,Microsoft,IBM,Novell,Borland...很多公司联合起来制订了一套可以适用于全世界所有国家的字符码,就称为Unicode.

Unicode的特点是:
不管哪一国的字符码均以两个Byte表示,例如"A"在Unicode则是16进制41和00的组合,即4100,高位41(转换为Ascii码即是 65=A),
WindowsNT/2000以Unicode来表示字符集,例如你可以看到MSSQLServer中产生的SQL文件可以选择是以Unicode来保存还是以普通格式来保存,如果你以Unicode保存,则在95/98平台许多软件均无法正确读出其格式。

varchar在SQL Server中是采用单字节来存储数据的,nvarchar是使用Unico来存储数据的,存储到SQL Server中会保存为两个字节(一般采用Unico编码),英文字符保存到数据库中,如果字段的类型为varchar,则只会占用一个字节,而如果字段的类型为nvarchar,则会占用两个字节。但使用nvarchar在判断字符串的时候可以不需要考虑不同种种字符的差别,当然,使用nvarchar存储英文字符会增大一倍的存储空间.但是在存储代价已经很低廉的情况下,优先考虑兼容性会给你带来更多好处的.


     

所以在Design的时候应该尽量使用nvarchar来存储数据.只有在你确保该字段只是存储英文的时候,才采用varchar来存储.

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值