Asp.net中的页面乱码的问题

本文探讨了多种编码与字符集问题,包括设置全局编码、下载文件时中文名称乱码的解决方案、识别字符串中是否包含特定语言字符的方法、解决文件读取中文乱码及查询字符串中文乱码的问题。

1.<globalization
            requestEncoding="gb2312"
            responseEncoding="gb2312"
   />

或者

<META http-equiv="content-type" content="text/html; charset=gb2312">


2.下载文件时指定文件名,中文的文件名出现了乱码?

Response.AddHeader("Content-Disposition", "attachment; filename="+HttpUtility.UrlEncoding(filename.ToString ()));

 

3.如何识别字符串中是否包含韩文

http://search.youkuaiyun.com/Expert/topic/2456/2456407.xml?temp=.5485498

如果只有英文和韩文
/*******该函数返回字符串中除英文外的字符*********/
create function test(@a varchar(20))
returns varchar(20)
as
begin
   declare @b varchar(20),@i int
   set @b = ''
   set @i = 1
   while @i<= len(@a)
   begin
       if Upper(substring(@a,@i,1)) not between 'A' and 'Z'
           set @b = @b + substring(@a,@i,1)
 set @i = @i+1
   end
   return @b
end

Select dbo.test('aabc12dsa451')

                    
--------------------
12451

(所影响的行数为 1 行)
--1.有关多国文字的,一定要用UNICODE判断!
--2.韩文UNICODE分两断: 12592->12687  44032->55203
相关网站:http://www.buja.8u8.com/eeeeee.htm


create function hw(@str Nvarchar(100))
returns int
as
begin
declare @a int
set @a=0
while @str<>'' and @a=0
  begin
  set @a=(case when unicode(left(@str,1)) between 12592 and 12687
                 or unicode(left(@str,1)) between 44032 and 55203
               then 1
               else 0 end)
  set @str=right(@str,len(@str)-1)
  end
return @a
end 

--调用:
declare @a nvarchar(100)
set @a=N'abc中&#44035;国123'
select dbo.hw(@a)

--return: 1


set @a=N'abc中国123'
select dbo.hw(@a)

--return: 0

 

4.为什么文件读出来的中文字符是乱码?

System.IO.StreamReader m_fs = System.IO.File.OpenText(Hfile_SelectFile.Value);
改为
System.IO.StreamReader m_fs = new System.IO.StreamReader(Hfile_SelectFile.Value,System.Text.Encoding.GetEncoding("gb2312"));

5.JMAIL 发邮件附件或者没有或者在正文中是乱码

http://community.youkuaiyun.com/Expert/topic/3172/3172047.xml?temp=.3463404

6.怎么解决查询字符串中文乱码问题?

查询内容用Server.UrlEncode编码

string url ="http://localhost/test/test.aspx?a="+ Server.UrlEncode("张三");

-->Server.UrlDecode()

 

 

 
asp.net乱码解决方法 1、从IE地址栏中直接输入这个地址,访问没错;   2、做一个静态页,其中包括这个超链接,点击访问也没错;   3、就是把这个链接添加到这个功能块中,点击访问那边接收到的是乱码。   一开始,被这个问题也搞得头大,在google了一把后,总算是把问题给搞清楚了,其实只要这个链接地址不经过任何编码传递是不会有问题的。但就是加到了这个功能块后,再点击,虽然这个时候在IE地址栏里显示的还是"http://www.****.com/user.aspx?id=水天",但真正传递过去的参数"水天"其实已经经过类似于Server.UrlEncode的操作了,当然默认是utf-8编码,正是由于这个原因,如果对方系统不进行相应的解码,直接操作该参数,就产生了以上的错误。   解决方法:   网上有很多解决之道,最常见的莫过于以下几点:   1、在web.config里配制,这个方法确实可行,但我想很多人不想用这种方法来解决,把整个项目的请求和回应都定为gb2312,我觉得不是一个好办法,有点本末倒置了,毕竟这会导致很多其它问题的出现。   2、把要包含该链接的aspx文档,修改其charset属性为gb2312。这个方法到也可以接受,不过对于该文中的问题还不是最好的方法,因为该功能块是可以动态添加到任何页面的,难道要去修改所有的页面?想想还是不太合适。 单个页面解决方案 添加   3、直接用Server.UrlEncode和Server.Decode进行加码和解码操作,这种方法对于发送方和接收方都在一个项目中是可行的,现在的问题是,我们要随意去访问别人的系统,所以只能弃用此方法了。   4、采用HttpUtility.UrlEncode(query, System.Text.Encoding.GetEncoding("GB2312"));对链接中的参数值进行gb2312的编码,这种方法,对方不用进行任何解码操作,直接接收参数则不会出现乱码。   一般提到最多的也就上面4种方法,其它的也跟这些大同小异。仔细分析后,觉得还是第4种方法最适合解决当前问题,把中文参数进行如4中的操作。但又出现另外一个问题,由于这是一个用户可以自由输入链接地址的功能,所以首先要做的就是得先分析这些链接URL,解析出参数,再对这些参数进行4中操作,然后再合拼成原来的URL地址。   幸亏,URL参数解析C#已经有类库的支持,不用再去写那些复杂的正则表达式来匹配了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值