惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Microsoft Azure Blog
Microsoft Azure Blog
V
V2EX
博客园 - 【当耐特】
WordPress大学
WordPress大学
爱范儿
爱范儿
美团技术团队
宝玉的分享
宝玉的分享
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
小众软件
小众软件
量子位
Hugging Face - Blog
Hugging Face - Blog
B
Blog RSS Feed
Recorded Future
Recorded Future
Engineering at Meta
Engineering at Meta
雷峰网
雷峰网
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
M
MIT News - Artificial intelligence
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 聂微东
H
Hackread – Cybersecurity News, Data Breaches, AI and More
腾讯CDC
大猫的无限游戏
大猫的无限游戏
Jina AI
Jina AI
博客园 - 叶小钗
GbyAI
GbyAI
Y
Y Combinator Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
F
Full Disclosure
G
Google Developers Blog
D
Docker
T
Tailwind CSS Blog
C
Check Point Blog
Last Week in AI
Last Week in AI
人人都是产品经理
人人都是产品经理
T
The Blog of Author Tim Ferriss
B
Blog
博客园 - 三生石上(FineUI控件)
博客园 - Franky
H
Help Net Security
MyScale Blog
MyScale Blog
U
Unit 42
D
DataBreaches.Net
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
I
InfoQ
阮一峰的网络日志
阮一峰的网络日志
The GitHub Blog
The GitHub Blog
L
LangChain Blog
有赞技术团队
有赞技术团队
Martin Fowler
Martin Fowler
Microsoft Security Blog
Microsoft Security Blog

博客园 - 思无邪

Silverlight内存泄露(八)样式 Silverlight内存泄露(七)Command Silverlight内存泄露(六)MEF等Ioc框架引起内存泄露-ExportLifetimeContext Silverlight内存泄露(五)MEF等Ioc框架引起内存泄露-PartCreationPolicy Silverlight内存泄露(四)解决内存泄露 Silverlight内存泄露(二)检测内存泄露 从火狐放弃依据特性更新版本说起 Silverlight内存泄露(二)解决内存泄露之Dispose误用 Silverlight内存泄露(一)序 Silverlight IReader阅读器第二版 silverlight阅读器——面向领域的浏览器(二)——Silverlight阅读器架构 silverlight阅读器——起源面向领域的浏览器——概念 silverlight异步陷阱(二)循环 silverlight 异步陷阱(一)不能Remove事件处理程序 IReader Silverlight电子阅读器介绍开源项目 silverlight在线阅读器(一):介绍 新建立一个类似于CuteEditor的项目,希望有人参加。发布一个测试版本的dll 从控件开发的角度看几个editor控件,Freetextbox,radtoolbar,abouteditor,cuteeditor 想做一个关于word解析和HtmlEditor的项目,希望有人加入 cuteEditor6.0的破解方式与Cuteeditor6.0的脚本调试
silverlight在线阅读器(二):为silverlight增加gb2312编码
思无邪 · 2010-07-06 · via 博客园 - 思无邪

  阅读器遇到的第一问题就是中文编码,许多网站都使用中文编码,而silverlight并不支持,这是首先要解决的问题。

  .NET Compact Framework同样也不支持GB2312编码,这个解决方法同样适用于.NET Compact Framework。

  方法其实很简单,通过GB2312与unicode的对照表。首先把取得字节码,再转行到Unicode码,最后查表取得对应汉字,接下来就是实现的问题了。

  首先定义转换字典:字典信息可以从 转换字典 获得。

  第二步实现Encoding类,命名为:Gb2312Encoding,代码如下:

代码

   public class Gb2312Encoding : Encoding
    {
        
public override string WebName
        {
            
get
            {
                
return "gb2312";
            }
        }
public Gb2312Encoding()
        {
            
        }
        
public override int GetBytes(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex)
        {
            
throw new NotImplementedException();
        }
public override int GetChars(byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex)
        {
            
int j = 0;
            
char c;
            
for (int i = 0; i < byteCount; i += 2)
            {
                
if (i + 1 >= bytes.Length)
                {
                    
char[] last = Encoding.UTF8.GetChars(new byte[] { bytes[i] });
                    chars[j]
=last[0];
                }
                
else
                {
                    
byte[] bb = new byte[] { bytes[i], bytes[i + 1] };
                    
if (Gb2312toUnicodeDictinary.TryGetChar(bb, out c))
                    {
                        chars[j] 
= c;
                        j
++;
                    }
                    
else
                    {
                        
char[] tt = Encoding.UTF8.GetChars(new byte[] { bb[1] });
                        chars[j] 
= tt[0];
                        j
++;
                        
//测试下一个
                        if (i + 2 >= bytes.Length)
                        {
                            
char[] tttt = Encoding.UTF8.GetChars(new byte[] { bb[0] });
                            chars[j] 
= tttt[0];
                            j
++;
                        }
                        
else
                        {
                            
byte[] test = new byte[] { bb[0], bytes[i + 2] };
                            
if (Gb2312toUnicodeDictinary.TryGetChar(test, out c))
                            {
                                chars[j] 
= c;
                                j
++;
                                i
++;
                            }
                            
else
                            {
                                
char[] ttt = Encoding.UTF8.GetChars(new byte[] { bb[0] });
                                chars[j] 
= ttt[0];
                                j
++;
                            }

                        }
                    }
                }
            }

return chars.Length;
        }
public override int GetByteCount(char[] chars, int index, int count)
        {
            
return count;
        }
        
public override int GetCharCount(byte[] bytes, int index, int count)
        {
            
return count;
        }
public override int GetMaxByteCount(int charCount)
        {
            
return charCount;
        }
        
public override int GetMaxCharCount(int byteCount)
        {
            
return byteCount;
        }
        
public static int CharacterCount
        {
            
get { return 7426; }
        }
    }

 最主要的是GetChars与GetBytes方法。两个方法是互逆的,一个编码一个解码。由于阅读器只用到了解码部分,这个类也只实现解码。编码和解码是一样的,只是逆向查表而已。

用到的可以自己实现。

使用方法:

代码

WebClient wc = new WebClient();
                wc.Encoding 
= new Gb2312Encoding();
                wc.DownloadStringAsync(
new Uri(Uri));
                wc.DownloadStringCompleted 
+= (s, args) =>
                {
                    
if (args.Error == null)
                    {
                        
                    }
                };

这样就可以得到Gb2312编码的网页内容了。

完整代码可以从下面的链接下载。

演示地址http://silverlightreader.limewebs.com/

代码http://htmlextractor.codeplex.com/

详细信息可以参考:http://blogs.msdn.com/b/feiyu/archive/2009/12/08/support-gb2312-in-silverlight-net-framework.aspx

接下来,silverlight 4的内存泄露问题与基于silverlight的欺骗服务器方法。

 没想到silverlight4 会有如此严重的bug,模板的内存不会得到释放,由于阅读器用到EMF,并且所有控件都是动态加载到模板中的,内存会疯狂增长

 silverlight在线阅读器(三):silverlight 4的内存泄露问题与基于silverlight的欺骗服务器方法