yanglaopo dot net ,是找洋媳妇和老婆有什么区别的最好地方 !

The page is temporarily unavailable
nginx error!
The page you are looking for is temporarily unavailable.
Please try again later.
Website Administrator
Something has triggered an error on your
This is the default error page for
nginx that is distributed with
It is located
/usr/share/nginx/html/50x.html
You should customize this error page for your own
site or edit the error_page directive in
the nginx configuration file
/etc/nginx/nginx.conf.探索新的.NET &dotnet& 命令行接口(CLI) | Scott Hanselman的中文博客
Archives &(4)随笔 - 15&
文章 - 0&评论 - 32&trackbacks - 1
&&&& 由于工作需要,从网上下载了一个压缩组件--DotNetZip,使用感觉良好,但是目录中有中文名称的文件时,就会出现问题,要么名称显示不全,要么就显示若干个问号,很是令人苦恼!!
&&& 没办法,只好自己动手解决问题啦,一步步的跟踪定位,最后找到ZipEntry类的WriterHeader方法,估计是写文件头,文件名称应当写在这里,经过调试,发现这一行:
Code/**//////////////////////////////////替换内容byte[]&x&=&System.Text.Encoding.GetEncoding("GB2312").GetBytes(FileName);Int16&filenameLength&=&(Int16)x.L/**/////////////////////////////////被替换内容//&filename&length&(Int16)//Int16&filenameLength&=&(Int16)FileName.L/**/////////////////////////////////FileName.Length不论遇到一个汉字还是一个字母数字,都是返回1,而一个汉字却占两个字节,可能问题出在这儿,再进一步地跟踪,果然发现问题
Code&1/**//////////////////////////替换内容&2for&(j&=&<span style="color: #;&(j&&&x.Length)&&&&(i&+&j&&&bytes.Length);&j++)&3{&4&&&&bytes[i&+&j]&=&x[j];&5&&&&if&(_Debug)&System.Console.Write("&{0:X2}",&bytes[i&+&j]);&6}&7if&(_Debug)&System.Console.WriteLine();&8&9/**/////////////////////////被替换内容<span style="color: #<span style="color: #//for&(j&=&0;&(j&&&c.Length)&&&&(i&+&j&&&bytes.Length);&j++)<span style="color: #//{<span style="color: #//&&&&bytes[i&+&j]&=&System.BitConverter.GetBytes(c[j])[0];<span style="color: #//&&&&if&(_Debug)&System.Console.Write("&{0:X2}",&bytes[i&+&j]);<span style="color: #//}<span style="color: #//if&(_Debug)&System.Console.WriteLine();<span style="color: #/**/////////////////////////
程序大意是将文件名称转换为字符数组,再将字符数组压缩为字节数组,而一个字符中只有一个汉字,压缩完之后只有一个字节,而一个字节是无法表示汉字的,所以,我先采用GetBytes直接生成字节数组,获得字符串的真实长度[即汉字为2,字母数字为1],然后将字节数组逐个拷至目的字节数组,编译运行,中文名称果然顺利显示出来了!!!
&问题好象是解决了,可是当解压时,却傻眼了,都是些乱码.不过有了上次的调试经验,不需要辛苦跟踪了,知道问题出在读Header的地方,果然在ZipEntry类中,有ReadHeader方法,设断点,调试,最后定位于Shared类中的StringFromBuffer方法
Code&1/**//////////////////////////替换内容&2string&str2&=&System.Text.Encoding.GetEncoding("GB2312").GetString(buf,&start,&maxlength);&3return&str2;&4&5/**/////////////////////////被替换内容&6//int&i;&7//char[]&c&=&new&char[maxlength];&8//for&(i&=&0;&(i&&&maxlength)&&&&(i&&&buf.Length)&&&&(buf[i]&!=&0);&i++)&9//{<span style="color: #//&&&&c[i]&=&(char)buf[i];&//&System.BitConverter.ToChar(buf,&start+i*2);<span style="color: #//}<span style="color: #//string&s&=&new&System.String(c,&0,&i);<span style="color: #//return&s;<span style="color: #/**/////////////////////////&
这个方法大意是将字节数组逐个转换为字符数组将汉字的编码拆成两个字符这很明显会造成乱码既然编码采用那么解码也就用反的就行了编译运行大功告成
阅读(...) 评论()2062人阅读
8、开发错误处理记录(12)
1、C#(148)
今天在做分布式计算原型的时候出现了WCF调用错误,错误大意是指消息通道处于错误状态,经过跟踪调试,发现是由于跨域调用的问题造成的.问题场景是这样:客户端C通过WCF调用远程服务,该服务S启用一个新的应用程序域AD1,动态加载目标程序集,并执行该程序集中类CL的一个方法M,并将该方法的返回值(类型为T1)返回客户端C.这个应用程序域AD1虽然与主应用程序域都属于同一进程,但并不能直接相互访问,必须通过远程调用来实现,当然,由于都是同一个进程下,只要参与这个远程调用的对象都是继承自MarshalObjectByRef,这种远程调用并不需要象通常的那样通过remoting来实现,DotNet会自动处理。 Dotnet采用的是透明代理的方法(类似于我前面关于Spring技术博文中的AOP实现的方法),代理类是动态产生的。一般情况下这没有什么问题,但如果将调用目标方法返回的对象直接返回给WCF客户端,问题就出来了,就会报消息通道处于错误状态的异常。为什么会出现这种情况呢,原因如下:由于参与这个过程的类都会产生一个代理类,而且是动态产生的,因此调用方法M返回对象的实际类型并不是T1,而是T1 的一个代理子类TP1,注意,由于TP1是T1 的子类,基于面向对象继承的原则,父类可以用的地方,子类都可以用,因此编译时和运行时都不会出现类型错误。一般情况下这也没有问题,因为你使用T1类型变量是可以访问该代理对象的,但直接将该返回值对象作为WCF服务方法的返回值就有问题了,因为WCF对返回值进行序列化的时候是针对实际类型的(就是对象实例实际的类型,上面的调用中就是TP1),服务端用这个类型序列化没问题,因为类型TP1是存在的,但到客户端时,并不能反序列化回来,因为代理类TP1是动态产生的,只在服务端存在,客户端并不存在,所以就会报错。当然,这个错误报的有点笼统,害得我调试了半个小时才找到原因(分布式程序调式本身就是个细活)。找到问题的原因,解决的办法很简单,就是重新创建一个返回类型的实例,并将跨域返回的类型的值克隆到这个实例,然后返回新建的这个实例对象即可。这个错误比较隐蔽,主要原因是跨应用程序域访问的代理对象是DotNet动态产生的,而且是不需要程序员去干预的。PS:这也是C#中协变和抗变时需要特别注意的地方.补充:在自己增加WCF宿主服务时,一个端口只能被一个应用所有,&如果想在一台机器上启动多个宿主服务应用,则需进行端口级别的分离,路径和服务名只能在一个应用中做区分。否则会报该地址端口监听已被占用之类的的错误。而且由于一个服务需要建立一个host,因此建议一般情况下还是不要自己做宿主服务,用iis,WAS承载比较好。&补充():跨域调用时参与的类需要从MarshalByRefObject继承,而这个类最好不要用于WCF通信参数或返回值,会发生莫名其妙的序列化错误(有时候可以,有时候又不可以,但错误率很高)。结论就是用于跨应用程序域访问的参与类不要参与WCF通信。如果实在要参与,就需要对这种类设置标准合同属性(DataContractattribute,DateMemberAttribute).就为了调试这个错误,浪费了我2个小时有多。感觉这是微软WCF的一个bug,要么嘛,你就可以,要么嘛你就不行,有时候序列化正常,有时候序列化又出错(出在客户端代理这边).
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1196717次
积分:18347
积分:18347
排名:第289名
原创:562篇
转载:14篇
评论:489条
文章:10篇
阅读:10095
文章:56篇
阅读:74557
文章:10篇
阅读:18574
文章:10篇
阅读:47891
文章:18篇
阅读:46762
阅读:20427
文章:13篇
阅读:37701
阅读:14332
阅读:18865
(7)(7)(6)(10)(8)(1)(4)(6)(4)(11)(29)(22)(15)(10)(16)(25)(25)(14)(10)(33)(7)(2)(2)(2)(1)(3)(1)(1)(4)(4)(8)(6)(9)(8)(4)(11)(7)(8)(9)(11)(6)(7)(8)(10)(17)(10)(11)(18)(26)(61)(25)(1)(2)(1)(2)(2)

我要回帖

更多关于 媳妇和老婆有什么区别 的文章

 

随机推荐