| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1002 人关注过本帖
标题:[转载]实时切换big5/gb2312简繁体
取消只看楼主 加入收藏
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
结帖率:66.67%
收藏
 问题点数:0 回复次数:2 
[转载]实时切换big5/gb2312简繁体

以前解决gb2312/big5实时转换的做法一般是修改response.contentencoding

string switchlanguage(string strlanguage){
if(strlanguage.startswith("zh-cn")){
response.contentencoding=encoding.getencoding(936);
return "gb2312";
}
if(strlanguage.startswith("zh")){
response.contentencoding=encoding.getencoding(950);
return "big5";
}
response.contentencoding=encoding.getencoding(1252);
return "iso-8859-1";
}

范例:
switchlanguage(request.userlanguages[0]);

但有些gb2312简体字没有对应的big5,所以需要先转换成繁体的gb2312,再进行转换
如:“秋水无恨”的无,“中国”的国,就会显示“秋水?恨”和“中?”
等需要先转化为“秋水無恨”和“中國”,再转化为big5。

而filter正好帮助我们实现实时切换,主要源代码如下(_sgb和_tgb是gb2312简繁体对应的库)。

public override void write(byte[] buffer, int offset, int count)
{
encoding e=encoding.getencoding(936);
string str=e.getstring(buffer,offset,count);
for(int i=0;i<str.length;i++){
int j=_sgb.indexof(str[i]);
if(j!=-1)str=str.replace(_sgb[j],_tgb[j]);
}
e=encoding.getencoding(system.web.httpcontext.current.response.charset);
_sink.write(e.getbytes(str), 0, e.getbytecount(str));

}

范例:

<%@ page language="c#" %>
<script runat=server>
protected void page_load(object sender, eventargs ev)
{

response.contentencoding=encoding.getencoding(936);
if(request["e"]!=null){
response.filter = new qswhfilter.g2bfilter(response.filter);
if(request["e"]=="1")response.charset="big5";
}
username.text="秋水无恨(qiushuiwuhen)";
}
</script>
<asp:hyperlink runat=server navigateurl="g2bfilter.aspx" text="gb2312简体" />
<asp:hyperlink runat=server navigateurl="g2bfilter.aspx?e=0" text="gb2312繁体" />
<asp:hyperlink runat=server navigateurl="g2bfilter.aspx?e=1" text="big5繁体" />
hi,你好,我是<asp:label runat=server id=username/>,欢迎来到<%="蓝色经典blueidea"%>。

ps.如果web.config中有
<globalization requestencoding="gb2312" responseencoding="gb2312" fileencoding="gb2312"/>
可省略
response.contentencoding=encoding.getencoding(936);

cs 源代码和dll:
g2bfilter.zip
dll直接拷到应用程序的bin目录即可调用

搜索更多相关主题的帖子: 简繁体 实时 response encoding 
2007-02-05 18:03
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 
不好意思,留着有用……
2007-02-05 18:04
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 
以下是引用spa429在2007-2-6 9:44:18的发言:

顶,版主听说你有个类似QQ的聊天程序,能不能放出来共享下,非常感谢!!

你听谁说的?我没有,舞雪那个才叫厉害

2007-02-07 11:33
快速回复:[转载]实时切换big5/gb2312简繁体
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023364 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved