免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: buypro9
打印 上一主题 下一主题

关于utf-8 代码转换问题 求解 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2011-01-19 16:40 |只看该作者
回复 9# ziyunfei


    我是指print decode_entities("& #x4E2D;& #x6587;")."\n";(程序中空格去掉了)返回的是
E2D;& #x6587;而不是你说的"中文".(不经过IE转)

论坛徽章:
0
22 [报告]
发表于 2011-01-19 17:55 |只看该作者
本帖最后由 toniz 于 2011-01-19 17:56 编辑

提供你两种方法:一是把你的UTF-8全部改成GB2312


二是用Encode模块。UTF-8只是UNICODE的一种存储方式,这里你混淆了。帮你改下代码。
  1. <html>
  2. <head>
  3. <meta http-equiv="content-type" content="text/html;charset=utf-8">
  4. <title>tf8 Example</title>

  5. </head>
  6. <body>
  7. 中文中文中文  <br>
  8. <form method="post" action="itest.cgi">

  9.   <p>word: <input name="word" type="text">  
  10. <input type="submit" name="Submit" value=" 查询 ">
  11. </form>



  12. </body>
  13. </html>
  14. -----------------------------------------------------
  15. #!/usr/bin/perl -w
  16. use CGI;
  17. use HTML::Entities;
  18. use utf8;
  19. use Encode;
  20. $query = new CGI;

  21. $secretword = $query->param('word');
  22. $remotehost = $query->remote_host();

  23. my $a = $secretword;
  24. $a = decode_entities($a);

  25. print $query->header(  -charset=>'utf-8' );  

  26. print encode("utf8",decode("gb2312",$a));
复制代码

论坛徽章:
0
23 [报告]
发表于 2011-01-19 17:56 |只看该作者
还有注意乱不乱码还和你浏览器的编码选择有关

论坛徽章:
0
24 [报告]
发表于 2011-01-19 18:03 |只看该作者
还有注意乱不乱码还和你浏览器的编码选择有关
toniz 发表于 2011-01-19 17:56



    我想在perl里直接把& #x4E2D;& #x6587;这类字符串变成$string="中文";而不是在浏览器里。有什么好办法吗?

论坛徽章:
0
25 [报告]
发表于 2011-01-19 20:56 |只看该作者
本帖最后由 buypro9 于 2011-01-20 11:07 编辑

toniz 你好

我测试了一下你的代码 结果白高兴了

我的意思是####encode####以后返回的结果是   "& #x4E2D; 这样的。  就是"& #x hexnum;"这样的格式 (&后面空格都去掉)
decode我已经测试出来了。我也在perlmonk上发了贴。目前还没有答复。



另外关于你说的
还有注意乱不乱码还和你浏览器的编码选择有关

我觉得你该测试一下就知道你的想法对不对


<html>

<head>

<meta http-equiv="content-type" content="text/html;charset=随意编码">


& #x4E2D;  (&后空格去掉)
</body>

</html>

按我测试结果 charset=随意编码的话都不会出现乱码

论坛徽章:
0
26 [报告]
发表于 2011-01-19 21:15 |只看该作者
我想在perl里直接把& #x4E2D;& #x6587;这类字符串变成$string="中文";而不是在浏览器里。有什么好办法吗?

据我所知 perl 里直接返回中文 需要这个shell支持中文。至于在浏览器中或者perl里直接支持 都牵涉到该程序是否支持中文。否则就是乱码


而我所说的字符串1.  本来就已经是 & #x+hexnumber格式了。不存在乱码不乱码问题.但是在浏览器中可以还原成正确字符。可以支持任何双字节的文字如日文。泰文等

论坛徽章:
0
27 [报告]
发表于 2011-01-19 21:17 |只看该作者
看来我这个问题比较偏。。。。。  
网上也google不到有用的答案。

论坛徽章:
0
28 [报告]
发表于 2011-01-20 08:56 |只看该作者

论坛徽章:
0
29 [报告]
发表于 2011-01-20 08:58 |只看该作者
本帖最后由 toniz 于 2011-01-20 09:03 编辑
我想在perl里直接把& #x4E2D;& #x6587;这类字符串变成$string="中文";而不是在浏览器里。有什么好 ...
bernana 发表于 2011-01-19 18:03
  1.     use Encode;
  2. use HTML::Entities;
  3. $a = "& #x4E2D;& #x6587";
  4. $bb= decode_entities($a);   #第一种方法


  5. $cc=chr(0x4E2D).chr(0x6587);  #第二种方法

  6. foreach my $aa(split //,$cc){
  7.         print encode('gb2312',$aa)."\n";
  8. }
复制代码

论坛徽章:
0
30 [报告]
发表于 2011-01-20 09:00 |只看该作者
你根本不知道我在和你说什么。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP