免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4594 | 回复: 9
打印 上一主题 下一主题

perl 如何把十六进制转中文 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-08-15 14:43 |只看该作者 |倒序浏览
hi:
    一个十六进制字符串:
    my $hex_str = "shake\xE4\xB8\xBA\xE4\xBB\x80\xE4\xB9\x882\xE5\x90\x8E\xE9\x9D\xA2\xE4\xB8\x8D\xE5\xA4\x9A\xE6\x9D\xA5\xE5\x87\xA0\xE4\xB8\xAA0";

   如果直接输出的话: print $hex_str."\n";  是可以自动转换的....但是此str 都是从文件中读出来的...应该如何转换呢?
   求解~~~~

论坛徽章:
0
2 [报告]
发表于 2013-08-15 18:03 |只看该作者
求指导~~~~ 为什么没人回呢.....

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
3 [报告]
发表于 2013-08-15 22:18 |只看该作者
回复 1# klathleen


    sprintf ?

论坛徽章:
13
双鱼座
日期:2013-10-23 09:30:05数据库技术版块每日发帖之星
日期:2016-04-20 06:20:00程序设计版块每日发帖之星
日期:2016-03-09 06:20:002015亚冠之塔什干火车头
日期:2015-11-02 10:07:452015亚冠之德黑兰石油
日期:2015-08-30 10:07:07数据库技术版块每日发帖之星
日期:2015-08-28 06:20:00数据库技术版块每日发帖之星
日期:2015-08-05 06:20:002015年迎新春徽章
日期:2015-03-04 09:57:09辰龙
日期:2014-12-03 14:45:52酉鸡
日期:2014-07-23 09:46:23亥猪
日期:2014-03-13 08:46:22金牛座
日期:2014-02-11 09:36:21
4 [报告]
发表于 2013-08-16 09:17 |只看该作者
Encode::decode("UTF-8",$hex_str);

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
5 [报告]
发表于 2013-08-16 09:43 |只看该作者
use Encode;

my $hex_str = "shake\xE4\xB8\xBA\xE4\xBB\x80\xE4\xB9\x882\xE5\x90\x8E\xE9\x9D\xA2\xE4\xB8\x8D\xE5\xA4\x9A\xE6\x9D\xA5\xE5\x87\xA0\xE4\xB8\xAA0";

$hex_str =~ s/\\x(..)/chr hex $1/eg;

print encode 'GBK', decode 'utf8', $hex_str; #我用的 windows 所以最后转成 GBK

结果 shake为什么2后面不多来几个0

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
6 [报告]
发表于 2013-08-16 09:54 |只看该作者
上面例子中字符串里面的 \ 都要写成 \\ 才符合你的意思。还有这个正则表达式不是最终答案,比如你读取的数据本来就要表达 \ 时是不是需要用 \\ 转义下? 那么写成 \\x 本意是 \x 却被错误转换了

论坛徽章:
0
7 [报告]
发表于 2013-08-16 10:40 |只看该作者
回复 4# bikong0411


    不知道你有没有做测试...我测试了下是不行的...
    这些数据都是从文件中读来的....
    如果单独定义变量的话, (my $hex_str = "shake\x0E......") 再直接输出的话,是没问题的..
  1. while (<FL>) {
  2.     chomp;
  3. #my $content = Encode::encode("UTF-8",Encode::decode("UTF-8",$_));
  4.     my $content = Encode::decode("UTF-8",$_);
  5.     print $content."\n";
  6. }
复制代码

论坛徽章:
0
8 [报告]
发表于 2013-08-16 11:25 |只看该作者
回复 6# zhlong8


    ok...谢谢老大..已搞定!   "" 双引的话貌似会帮你自己来转换了...如果写在双引中确实应该\\ 来转义~~~

论坛徽章:
13
双鱼座
日期:2013-10-23 09:30:05数据库技术版块每日发帖之星
日期:2016-04-20 06:20:00程序设计版块每日发帖之星
日期:2016-03-09 06:20:002015亚冠之塔什干火车头
日期:2015-11-02 10:07:452015亚冠之德黑兰石油
日期:2015-08-30 10:07:07数据库技术版块每日发帖之星
日期:2015-08-28 06:20:00数据库技术版块每日发帖之星
日期:2015-08-05 06:20:002015年迎新春徽章
日期:2015-03-04 09:57:09辰龙
日期:2014-12-03 14:45:52酉鸡
日期:2014-07-23 09:46:23亥猪
日期:2014-03-13 08:46:22金牛座
日期:2014-02-11 09:36:21
9 [报告]
发表于 2013-08-17 10:04 |只看该作者
回复 7# klathleen


    我测试了啊,在我这没问题

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
10 [报告]
发表于 2013-08-17 18:22 |只看该作者
谢谢藏,可惜还没看懂~哎 ,先收藏,慢慢学!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP