返回列表 回复 发帖

utf8与gb2312编码

问题:
1.将gb2312数据格式的文件转为utf8格式
2.在utf8编码下显示gb2312数据文件
3.如何直接生成utf8格式的数据文件
4.不涉及文件读取,script文件里print "中文";
其实最主要的一句为:
  1. use Encode qw/encode decode/;
  2. my $utf_data = encode("utf8", decode("gb2312", $data));
  3. # $data为gb2312格式, $utf_data为utf8格式
复制代码
等同的代码还有:
  1. use Encode qw/from_to/;
  2. from_to($data, "gb2312", "utf8");
  3. # $data从gb2312格式转为utf8格式
复制代码
相反从utf8转为gb2312也成。encode,decode里的参数互换下。
例子与代码:
gb.dat是gb2312数据格式的文件。在-charset=>';utf-8';时显示乱码,gb2312时正常。
  1. #!/usr/bin/perl
  2. use strict;
  3. use CGI::Carp qw(fatalsToBrowser);
  4. use CGI qw/:standard/;
  5. use Encode qw/encode decode from_to/;
  6. my $cgi = new CGI;
  7. # charset utf8
  8. print $cgi->header(-type=>';text/html';,-charset=>';utf-8';);
  9. # open the gb2312 file
  10. open(FH, "gb.dat");
  11. my $data = <FH>;
  12. close(FH);
  13. # convert gb2312 to utf8
  14. my $utf_data = encode("utf8", decode("gb2312", $data));
  15. # produce the utf8 file
  16. open(FH, ">utf8.dat");
  17. print FH $utf_data;
  18. close(FH);
  19. my $word = "我是中国人";
  20. from_to($word, "gb2312", "utf8");
  21. print "$utf_data, $word";
复制代码
经过转换后,以后在-charset=>';utf-8';下直接读取utf8.dat而不用再次decode/encode.
不涉及文件读取,script文件里print "中文";
在script.pl里use encoding "euc-cn", STDOUT => "utf8";
  1. use CGI qw/:standard/;
  2. use encoding "euc-cn", STDOUT => "utf8";
  3. my $cgi = new CGI;
  4. print $cgi->header(-type=>';text/html';,-charset=>';utf-8';);
  5. print "我是中国人,我爱野文";
复制代码

                     我是一个呼吸着现在的空气而生活在过去的人
               这样的注定孤独,孤独的身处闹市却犹如置身于荒漠
                                     我已习惯了孤独,爱上孤独
                                 他让我看清了自我,还原了自我
                             让我再静静的沉思中得到快乐和满足
                                   再孤独的世界里我一遍又一遍
                                   不厌其烦的改写着自己的过去
                                             延伸到现在与未来
                                       然而那只是泡沫般的美梦
                                 产生的时刻又伴随着破灭的到来
                         在灰飞烟灭的瞬间我看到的是过程的美丽
                                      而不是结果的悲哀。。。
返回列表