问题描述
stringFileName="[ABC]测试文件_Log_20100101.wmv";HyperLinkLink=(HyperLink)e.Row.Cells[13].Controls[0];Link.NavigateUrl="\\192.0.0.1\file\"+FileName;在调试的时候NavigateUrl的值没有问题,是“\\192.0.0.1\file\[ABC]测试文件_Log_20100101.wmv”但是当鼠标放在链接上在ie的左下角显示的是“\\192.0.0.1\file\%5BABC%5D测试文件_Log_20100101.wmv”也就是只有[]变成了乱码中文字没有问题这样点击链接后无法打开这个视频文件提示“无法显示网页”我也查找了一些帖子尝试着改成Link.NavigateUrl=Server.UrlEncode("\\192.0.0.1\file\"+FileName);但是点击链接后网页变成了一堆红色字的乱码还试过在Web.config里加<globalizationrequestEncoding="gb2312"responseEncoding="gb2312"/>但还是不行我现在真的不知道应该怎样做了,请大家帮帮忙很急谢谢~!!
解决方案
解决方案二:
<globalizationrequestEncoding="utf-8"responseEncoding="utf-8"/>编码
解决方案三:
跟编码没关系...URI有URI的规矩,UNC不是随便在哪里都能用的...Link.NavigateUrl="file:///192.0.0.1/file/"+FileName;
解决方案四:
引用1楼wuyq11的回复:
<globalizationrequestEncoding="utf-8"responseEncoding="utf-8"/>编码
这样也不行有试过
解决方案五:
引用2楼vrhero的回复:
跟编码没关系...URI有URI的规矩,UNC不是随便在哪里都能用的...Link.NavigateUrl="file:///192.0.0.1/file/"+FileName;
这样也不行而且像我原来那样赋值的话当鼠标放在链接上在ie的左下角显示的是“file://192.0.0.1/file/%5BABC%5D测试文件_Log_20100101.wmv”之前是我笔误写错了其实我只要把[]去掉就可以查看视频文件了但是为什么[]就是有问题呢
解决方案六:
首先要这样限定一下<globalizationrequestEncoding="utf-8"responseEncoding="utf-8"/>另外这个限定后,你还要看一下页面,确定是否是utf-8,因为有时候页面上限定了gb2312,就算webconfig限定成utf-8了,页面的限定还是优先级高一些然后发送参数的时候Server.UrlEncode接收的时候,Server.UrlDecode保证没问题
解决方案七:
uri必须要对特殊字符编码,显示无关紧要...
解决方案八:
一般要所有页面的编码格式统一.
解决方案九:
引用5楼seesea125的回复:
首先要这样限定一下<globalizationrequestEncoding="utf-8"responseEncoding="utf-8"/>另外这个限定后,你还要看一下页面,确定是否是utf-8,因为有时候页面上限定了gb2312,就算webconfig限定成utf-8了,页面的限定还是优先级高一些然后发送参数的时候Server.UrlEncode接收的时候,Server.UrlDecode保证没问题
如果Link.NavigateUrl=Server.UrlEncode("\\192.0.0.1\file\"+FileName);那我什么时候Server.UrlDecode呢?我只是做了个链接在什么函数中吗?还是怎么做?
解决方案十:
引用6楼vrhero的回复:
uri必须要对特殊字符编码,显示无关紧要...
但是现在如果显示正确的话就能打开文件错误的话就不行啊
解决方案十一:
在那种环境里在VS2003里可以显示,在以上使用Hyperlink事件实现打开文件
解决方案十二:
引用9楼sjiuyuan85的回复:
引用6楼vrhero的回复:uri必须要对特殊字符编码,显示无关紧要...但是现在如果显示正确的话就能打开文件错误的话就不行啊
你能不能打开文件只跟客户端字符集是否支持有关系,和显示无关...
解决方案十三:
引用11楼vrhero的回复:
你能不能打开文件只跟客户端字符集是否支持有关系,和显示无关...
那怎么样才能让客户端的字符集支持呢?现在是如下情况Link.NavigateUrl="mms://192.0.0.1/file/"+FileName;FileName中的中文显示是乱码Link.NavigateUrl="192.0.0.1/file/"+FileName;没有问题只要去掉mms://就可以为什么我现在要怎样做才能通过点击这个链接来打开视频文件呢
解决方案十四:
页面乱码彻底解决方案:1.在设计数据时,就要注意:varchar,char,text;这样的数据类型就不要用了.全都改用:nvarchar,nchar,ntext;前缀"n"表示是:Unicode.2.配置文件中:<globalizationrequestEncoding="utf-8"responseEncoding="utf-8"/>,就用:utf-8这样也是保证:Unicode3.在每个页面的HTML页:<%@Pagelanguage="c#"......CodePage="65001"%>都加上:CodePage="65001"这样还是保证:Unicode4.在服务器代码页写SQL语句时要注意:INSERTINTOrates(currency_id,date,currency,Rate)VALUES(1,N'2010-01-08',N'AUD',1.00)在对应的字符型字段值前加上:N--这样还是保证:Unicode特别是INSERT,UPDATE要注意给值加上:N前缀.--程序运行时,这4点联合作用,页面是绝对不会出现乱码的.不管是(中文,日文,德文,英文,西班牙文,葡萄牙文,法文,俄文......)都能正常显示.
解决方案十五:
你这里的问题是转义序列的问题。看下面的代码:stringcertsql=string.Format(@"selectdistinctPartner_CertificationfromMARS$wherePartner_Certification!=''andCountry='{0}';selectdistinctGTMTypeGTMfromMARS$whereGTMType!=''andCountry='{0}';selectdistinctSales_LevelfromMARS$whereSales_LevelisnotnullandSales_Level!=''andCountry='{0}';selectdistinctCisco_CategoryfromMARS$whereCisco_Category!=''andCountry='{0}';",sctry);这才是字符串正确的写法。string.Format();这个方法表示字符串可使用占位符,将变量放在最后替换占位符。"@"表示可任意换行,不需要再用字符串相加的字法。string.Format();这个方法同时也能处理字符中的"\\192.0.0.1\file\"+FileName;斜线转义问题.所以你可这样写:string.Format(@"./192.0.0.1/file/{0}",FileName);
解决方案:
引用2楼vrhero的回复:
跟编码没关系...URI有URI的规矩,UNC不是随便在哪里都能用的...Link.NavigateUrl="file:///192.0.0.1/file/"+FileName;
我写了一个也是的"["如果鼠标放上去为%5B']'为%5D个人认为是不是内部的一个编码格式。。
解决方案:
引用6楼vrhero的回复:
uri必须要对特殊字符编码,显示无关紧要...
正确。如果你跳转错误,那说明你的路径应该错误了。。。
解决方案:
好老的帖子啊可是我好像还是解决不了啊